然后使用数组链接 [重复]

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&lt;T&gt;[]的序列:

let loopback = (arr, i=0) => 
    return arr[i].then(() => 
        if (i < arr.length - 1)
            return loopback(arr, i+1);
    );
;

let last = loopback(load);

【讨论】:

以上是关于然后使用数组链接 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS - 状态数组中的重复对象保持链接

氧气 - 高级自定义字段重复器子字段 - 链接字段

iOS:在数组中存储指向 UIImageViews 的链接,然后使用它们

单击 iframe 中的链接,然后执行 jQuery 操作 [重复]

求数组中重复的数字

数组区间操作,数组中重复数相关