【问题标题】:Angularjs + PromiseAngularjs + 承诺
【发布时间】:2016-09-02 06:39:27
【问题描述】:

我正在使用 Angularjs,我在工厂方法中有两个 api。我试图一一访问这两种方法。但它不起作用。

我们需要先打印 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.测试2 2. 测试1

期待 test1 而不是 test2

【问题讨论】:

  • 将你的整个factoryMethod.test2().then(function(data) {...})移动到第一个回调函数中。
  • 如何获得 test1 函数的响应?请帮助我

标签: javascript angularjs promise factory angular-promise


【解决方案1】:

可以这样。看看sn-p

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>  

【讨论】:

  • 对不起,我的问题是控制器如何处理错误?
  • 看,我已经更新了我的 sn-p,并在控制器中处理了错误。
【解决方案2】:
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);
    });
}

【讨论】:

    【解决方案3】:
    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);
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 2013-10-29
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多