2016-09-02 5 views
-1

私はAngularjsを使用していますが、ファクトリメソッドでは2つのAPIがあります。私はその2つの方法に1つずつアクセスしようとしました。しかしそれは働かない。Angularjs + Promise

最初にtest1を印刷してからtest2を印刷する必要があります。

コントローラーコード:

app.controlle("Test").function($scope, factoryMethod) { 
    factoryMethod.test1().then(function(data) { 

     console.log(data); 
     console.log("test1"); 

    }).then(factoryMethod.test2().then(function(data) { 
     console.log(data); 
     console.log("test2"); 

    })).catch(function(data) { 
     alert(data); 
    }); 
} 

工場コード:

app.factory("factoryMethod", function(){ 
    //code for test1 
    //code for test2 
}); 

現在のコンソールログの印刷、次の順序: 1. TEST2 2. test1の

は期待TEST1とTEST2より

+2

を見て()関数(データを{...})'最初のコールバック関数の中へ。 – Phil

+0

どのようにしてtest1関数の応答を得ることができますか? plsは私を助ける – RSKMR

答えて

1

このようにすることができます。あなたの全体 `factoryMethod.test2()。その後、移動スニペット

var app = angular.module('myapp',[]); 
 

 
app.factory("factoryMethod",['$q',function($q){ 
 
    
 
    var test1 = function(){ 
 
    var deferred = $q.defer(); 
 
    
 
     deferred.resolve("test1"); 
 
      
 
      return deferred.promise; 
 
    } 
 
    
 
    var test2 = function(){ 
 
     var deferred = $q.defer(); 
 
    
 
     deferred.resolve("test2"); 
 
      
 
      return deferred.promise; 
 
    } 
 
    
 
    return { 
 
     test1 : test1, 
 
     test2 : test2 
 
    } 
 
}]); 
 

 
app.controller("Test",function($scope, factoryMethod){ 
 
    
 
    var promise = factoryMethod.test1(); 
 
    
 
    promise.then(function(data){ 
 
    
 
    console.log(data); 
 
    
 
    factoryMethod.test2().then(function(data){ 
 
    console.log(data); 
 
     },function(error){ 
 
    console.log("error from test 2"); 
 
}) 
 
     },function(error){ 
 
    console.log("error from test 1") 
 
}) 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myapp" ng-controller="Test"> 
 
    
 
</div>

+0

エラーを処理する方法は? – RSKMR

+0

エラーのためにdeffered.rejectを使います。 –

+0

申し訳ありませんが、私の質問はコントローラでどのようにエラーを処理することができますか? – RSKMR

1
app.controlle("Test").function($scope, factoryMethod) { 
    factoryMethod.test1().then(function(data) { 
     console.log(data); 
     console.log("test1"); 
     factoryMethod.test2().then(function(data) { 
      console.log(data); 
      console.log("test2"); 
     }); 
    }).catch(function(data) { 
     alert(data); 
    }); 
} 
0
app.controlle("Test").function($scope, factoryMethod) { 
    var myData = factoryMethod.test1().then(function(data) { 

     // Return data from factoryMethod1 
     return data; 

     // Or return the data from factoryMethod2 (remove the return statement above if you want this 
     return factoryMethod.test2().then(function(data) { 

      return data; 
     }); 
    }).catch(function(data) { 
     alert(data); 
    }); 
} 
関連する問題