使用可以很好地解决这一问题
[].reduce。
var chain = itemsToProcess.reduce(function (previous, item) { return previous.then(function (previousValue) { // do what you want with previous value // return your async operation return Q.delay(100); })}, Q.resolve());chain.then(function (lastResult) { // ...});reduce遍历数组,传入上一次迭代的返回值。在这种情况下,您将返回诺言,因此每次您链接一个
then。您提供了一个初始承诺(如您所做的那样
q.resolve("start"))以开始工作。刚开始时,可能需要花一些时间来思考这里发生的事情,但是如果您花一点时间来解决它,那么在任何地方使用它都是一种简单的模式,而无需设置任何机械。



