在promise库Q中,您可以执行以下操作来按顺序链接promise:
var items = ['one', 'two', 'three'];
var chain = Q();
items.forEach(function (el) {
chain = chain.then(foo(el));
});
return chain;
但是,以下内容不适用于$q
var items = ['one', 'two', 'three'];
var chain = $q();
items.forEach(function (el) {
chain = chain.then(foo(el));
});
return chain;
发布于 2014-09-07 05:06:56
只需使用$q.when()函数:
var items = ['one', 'two', 'three'];
var chain = $q.when();
items.forEach(function (el) {
chain = chain.then(foo(el));
});
return chain;
注意: foo必须是一个工厂,例如
function setTimeoutPromise(ms) {
var defer = $q.defer();
setTimeout(defer.resolve, ms);
return defer.promise;
}
function foo(item, ms) {
return function() {
return setTimeoutPromise(ms).then(function () {
console.log(item);
});
};
}
var items = ['one', 'two', 'three'];
var chain = $q.when();
items.forEach(function (el, i) {
chain = chain.then(foo(el, (items.length - i)*1000));
});
return chain;
发布于 2016-07-22 23:42:39
以一种可能比redgeoff's answer更简单的方式,如果您不需要自动化,您可以结合使用$q.when()
和.then()
来链接promises,如this post开头所示。return $q.when() .then(function(){ return promise1; }) .then(function(){ return promise2; });
发布于 2017-03-22 21:08:52
拥有以下内容:
let items = ['one', 'two', 'three'];
一行(3行表示可读性):
return items
.map(item => foo.bind(null, item))
.reduce($q.when, $q.resolve());
https://stackoverflow.com/questions/25704745
复制相似问题