您将诺言
.then()与返回另一个诺言的回调一起使用。因此,假设您有三个函数a,b和c都返回了诺言。您可以像这样链接它们(按顺序执行):
a().then(b).then(c).then(function(result) { // all are done here});
如果您正在处理数组,并且
myFunc要对数组中的每个项目调用一个promise-returning函数,则可以对数组使用标准设计模式,并且promise
.reduce()可以一次遍历数组中的一个项目:
var items = [...];items.reduce(function(p, item) { return p.then(function() { return myFunc(item); });}, Promise.resolve());
事实证明,这实际上只是
.then()像第一个示例中那样链接了一堆处理程序,而是使用的结构
.reduce()为您遍历数组。
从ES2017开始,您还可以使用async / await依次处理数组,如下所示:
async function processArray(arr) { for (let item of arr) { let result = await somePromiseReturningFunc(item); // do something with result here before // going on to next array item } return someFinalResult;}processArray(someArray).then(result => { // done processing array here}).catch(err => { // handle error here});
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)