2016-08-23 10 views
0

私は$ qと約束が同期プログラミングには良いと聞いています。私の約束が機能していないのはなぜですか

タイムアウトのある最初の関数の後に2番目の関数を実行したい。だから、基本的に私は私のsecondfunctionが

私のコードを動作させる前に、最初の実行を終了するために、MT最初の関数をしたいです:

<head> 
    <link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script> 
</head> 

<body ng-app="myApp"> 
    <div ng-controller="myCtrl"> 
     <button ng-click="myClick()">Click Me!</button> 
    </div> 
    <script type="text/javascript"> 
    angular.module('myApp', []) 
    .controller('myCtrl',['$scope', '$timeout', '$q', function($scope, $timeout, $q){ 
    $scope.functionOne = function(){ 
     return $q(function(resolve, reject){ 
     $timeout(function(){ 
      alert("dean"); 
     }, 3000); 
     }) 
    }; 
    $scope.functionTwo = function(){ 
     alert("armada"); 
    } 

    $scope.myClick = function(){ 
     var promise = $scope.functionOne(); 
     promise.then(function(){ 
     $scope.functionTwo(); 
     }, function(){ 
     alert("fail"); 
     }) 
    }; 
}]); 
    </script> 
</body> 

Plunker:https://plnkr.co/edit/6hJF4mxrCQ17XXA43eUl?p=preview

+1

は 'resolve'または' reject'を呼び出すことはありません$timeoutはすでに約束を返しますか? – Icepickle

+0

はい、正解が与えられました –

答えて

2

約束が作成されます決して解決されませんでした。しかし、you don't need it at all!ある

$scope.functionOne = function(){ 
    return $timeout(function(){ 
    alert("dean"); 
    }, 3000); 
}; 
+0

ありがとうございました! –

1

あなたが(私の意見では)したいですか何をのためのより良い方法:あなたの原因

$scope.functionOne = function(){ 
    var defer = $q.defer(); 

    $timeout(function(){ 
     defer.resolve({data:""}); // or defer.reject(data) 
    }, 1000); 

    return defer.promise; 
}; 
+0

ベルギの答えはどう違うのですか? –

+0

です。 Bergiの答えの 'functionOne'は約束を解決するために$ timeout約束を使用します。私の答えでは '$ timeout(function(){}、1000);を削除し、' defer.resolve({data: "}}; – gianlucatursi

関連する問題