我刚刚开始学习Angularjs,所以我可能会使用整个错误,但请纠正我。
我有以下工厂:
app.factory('MenuService',['service1','service2','service3',function(service1,service2,service3){
var var1 = [],
var2 = [],
var3 = [];
service1.getDataMethod(function(data){
// processes data and saves it in var1
});
service2.getDataMethod2(function(data)){
});
/// same goes for service3.
return {"prop2": var1, "prop2" : var2, "prop3": var3};
}])
我需要根据第一个服务中返回的数据处理service2的数据返回,但每次尝试访问它时,该变量都是空的。
我知道函数返回一个promise,有没有办法告诉第二个函数等待第一个函数完成才能使用它带来的数据?
我希望自己明白了。如果我应该添加别的东西,请告诉我。
答案 0 :(得分:2)
喜欢这个吗?
service1.getDataMethod(function(data){
// processes data and saves it in var1
}).then(function(data) {
return service2.getDataMethod2(data)
})
基本上每个承诺都有.then()
方法。因此,您可以根据需要a.then().then().then()
此外,一些promise实现具有方法包装器,例如.success()
和.error()
。这些方法与.then()
答案 1 :(得分:0)
在angular中,您可以访问$ q服务,该服务是与promises一起使用的q库的实现。 https://docs.angularjs.org/api/ng/service/$q 如果您因某种原因不喜欢它,请尝试async
答案 2 :(得分:0)
基本上你必须承诺你的承诺:
service1.getDataMethod(function(data){
return something; // this is important, only that way you will be
// able to use the next .then()
})
.then(function(something) { // what you returned previously will be the function's argument
return service2.getDataMethod2(data);
})
.then(function(result) { // `result` is what getDataMethod2 resolves
})
.catch(function(err) {
// very important to add .catch to handle errors
});