javascript - 如何在循环中Promise?

标签 javascript asynchronous promise es6-promise

    var arr = ["node.js", "Java", "C#"];
var newArr = [];

let promise = new Promise((resolve, reject) => {

        for(let i = 0; i < arr.length; i++) {
            setTimeout(() => {
                newArr.push(arr[i])
                resolve(newArr);
            }, 1000);
        }

});

promise
        .then(result => {
             alert(result);
         }
);

现在它会在第一次循环后提醒数据。如何在通过整个循环后显示带有 Promise 的异步操作的数据?

期望的行为:以异步模式将数据添加到 newArr,并在循环结束后显示它。

最佳答案

您需要与promise all有多个 promise

const myPromises = [];
for (let i=0; i<5; i++) {
  myPromises.push(new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log("done", i);
        resolve(i)
      } , i*500);
  })); 
}

Promise.all(myPromises).then(values => { 
  console.log("All: ", values)
});

关于javascript - 如何在循环中Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46290407/

相关文章:

javascript - 将缓冲区转换为可读字符串javascript

Python - 异步日志记录

javascript - 服务失败时如何解决状态

redis - 为什么在使用 node 和 redis 时我的 promise 没有解决?我的数组返回第一次迭代而不是等待整个代码运行

javascript - Node Express 应用程序调用 mssql 表示连接已关闭

javascript - 如何为当前作用域的成员创建别名

javascript - 基于键及其值的 GroupBy 数组

javascript - 如何使用 angular2-tree 插件获取检查的树结构值

javascript - 异步分配 JavaScript 变量的风险

javascript - 使用 Mocha/Chai 测试异步函数时,无法满足期望总是会导致超时