我想链接一些服务返回的承诺。只要某些返回承诺的方法不需要额外的参数,这就行得通。这是我的例子:
var first = function() {
var d = $q.defer();
$timeout(function() {
d.resolve("first resolved")
}, 100)
return d.promise;
};
var second = function(val) {
console.log("value of val: ", val);
var d = $q.defer();
$timeout(function() {
d.resolve("second resolved")
}, 200)
return d.promise;
};
first().then(second).then(function(value) {
console.log("all resolved", value);
});
这按预期工作。但是如果我的服务second
需要一个额外的参数val
来完成它的工作呢?使用上面的方法, 的值val
是"first resolved"
,因为它是从 中获取的解析值first
。
有没有办法,没有像这样嵌套匿名函数:
first().then(function() {
return second("foobar").then(function(value) {
console.log("all resolved", value);
});
});
我正在考虑使用$q.all
,但恕我直言,您无法为您的承诺指定订单。