当承诺链parsing时执行函数

我已经编写了使用Q.reduce机制的代码,其中函数insertItemIntoDatabase(item)返回parsing的promise。

items.reduce(function(soFar,item) { return soFar.then(function() { return insertItemIntoDatabase(item); }); },Q()); 

是否有任何可能性等待链完成,然后执行另一个function,或者我应该用其他方式链接这些function。

提前感谢您的帮助

.reduce()将从.reduce()循环返回最终值,在你的情况下这是最后的承诺。 要在.reduce()链及其所有asynchronous操作完成后执行某些操作,只需将一个.then()处理程序放在返回的最终承诺上:

 items.reduce(function(soFar,item) { return soFar.then(function() { return insertItemIntoDatabase(item); }); },Q()).then(someOtherFunction); 

这个模式的目的正是这样的:返回序列结果的承诺。 写出(没有reduce ),这完全等同于expression式

 Q() .then(function() { return insertItemIntoDatabase(items[0]); }) .then(function() { return insertItemIntoDatabase(items[1]); }) .then(function() { return insertItemIntoDatabase(items[2]); }) … 

你可以简单地添加另一个.then() ,它将在链的末尾调用你的callback函数。