然后使用数组链接 [重复]
Posted
技术标签:
【中文标题】然后使用数组链接 [重复]【英文标题】:Chain thens using an array [duplicate] 【发布时间】:2019-04-04 22:20:00 【问题描述】:我正在寻找一种将多个 Promise 链接在一起的方法,类似于 Promise.all,但我希望每个 Promise 都等待最后一个。我确定这可能已经得到解答,但我想我不知道该用谷歌搜索什么。
function output(msg)
return new Promise((resolve,reject) =>
console.log(msg);
resolve();
);
output('1st').then(() =>
output('2nd').then(() =>
output('3rd').then(() =>
console.log('done')
);
);
);
// I want to be able to build from an array of length n
const msgs = ['1st','2nd','3rd'];
for(let i = 0; i < msgs.length;i++)
// Not sure what to do here
output(msgs[i]).then(() =>
output(msgs[i+1]);
);
【问题讨论】:
相关:Resolve promises one after another (i.e. in sequence)? 【参考方案1】:您可以在数组上使用forEach
之类的循环,并在async function
内使用await
:
function output(msg)
return new Promise((resolve,reject) =>
console.log(msg);
resolve();
);
const msgs = ['1st','2nd','3rd'];
function ArrPromiseAll(arr)
arr.forEach(async function(i)
await output(i);
);
console.log("Done All.");
ArrPromiseAll(msgs);
输出:
1st
2nd
3rd
Done All.
【讨论】:
【参考方案2】:您可以像这样链接它们以避免像地狱一样嵌套:
output('a')
.then(a_out => output('b'))
.then(b_out => output('c'))
.then(c_out => console.log('all done'));
对于Promise<T>[]
的序列:
let loopback = (arr, i=0) =>
return arr[i].then(() =>
if (i < arr.length - 1)
return loopback(arr, i+1);
);
;
let last = loopback(load);
【讨论】:
以上是关于然后使用数组链接 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
iOS:在数组中存储指向 UIImageViews 的链接,然后使用它们