【发布时间】:2016-05-04 17:58:51
【问题描述】:
我目前正在尝试创建一个工具来链接动态数量的承诺。这是我的代码:
// NB: This is made using angular's $q, but this applies to anything else
promiseChain = function(array, passedPromise) {
let chain = $q((resolve, reject) => resolve());
for (let elem of array)
chain = chain.then(_ => passedPromise(elem));
return chain;
};
这是我的测试代码:
// This returns a timeout wrapped in a promise
let testFn = function(s) {
return $timeout(function() {
console.log(s);
}, 500);
};
let promise = makePromiseChain([1,2,3,4,5,6,7,8,9], testFn);
promise.then(_ => console.log('finished'));
这行得通。但是,让我讨厌的是promiseChain的第一行:
$q((resolve, reject) => resolve())
没有其他方法可以创建一个空的、自我解决的承诺,或者启动链吗?我觉得使用这段代码很脏。 :/
【问题讨论】:
-
我们通常使用
Array.prototype.reduce()- stackoverflow.com/a/25730751/3478010 -
你的
passedPromise必须是一个函数,而不是一个promise,否则passedPromise(elem)会抛出。
标签: javascript angularjs promise angular-promise