Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 等到所有的承诺都完成_Node.js - Fatal编程技术网

Node.js 等到所有的承诺都完成

Node.js 等到所有的承诺都完成,node.js,Node.js,我如何知道for循环中的所有承诺何时完成执行?有更好的方法吗 for (let index = 0; index < array.length; index++) { request(array[index], function (error, response, body) { promise1().then(result1 => { if (result1 !== 0) { promise2().then(result2 => {

我如何知道for循环中的所有承诺何时完成执行?有更好的方法吗

for (let index = 0; index < array.length; index++) {
  request(array[index], function (error, response, body) {
    promise1().then(result1 => {
      if (result1 !== 0) {
        promise2().then(result2 => {
          promise3(result2);
        }
      } else {
        promise3(result1);
      }
    });
  });
}

console.log('all promises finished');
for(让index=0;index{
如果(结果1!==0){
承诺2()。然后(结果2=>{
承诺人3(结果2);
}
}否则{
承诺3(结果1);
}
});
});
}
log(“所有承诺完成”);

通过将代码转换为使用
async
/
wait
将项目映射为承诺,然后使用标准的
Promise.all()
函数等待所有承诺的解决,这将变得更容易:

// promisified request()
const requestP = item =>
  new Promise((resolve, reject) => {
    request(item, (error, response, body) => {
      if (error) return reject(error);
      resolve({ response, body });
    });
  });

const processItem = async item => {
  const { response, body } = await requestP(item);
  const result1 = await promise1(/* this probably uses response or body? */);
  if (result1 !== 0) {
    const result2 = await promise2();
    return await promise3(result2);
  } else {
    return await promise3(result1);
  }
};

const promises = array.map(processItem);

Promise.all(promises).then(() => {
  console.log("all promises finished");
});


通过将代码转换为使用
async
/
wait
将项目映射为承诺,然后使用标准的
Promise.all()
函数等待所有承诺的解析,这会变得更容易:

// promisified request()
const requestP = item =>
  new Promise((resolve, reject) => {
    request(item, (error, response, body) => {
      if (error) return reject(error);
      resolve({ response, body });
    });
  });

const processItem = async item => {
  const { response, body } = await requestP(item);
  const result1 = await promise1(/* this probably uses response or body? */);
  if (result1 !== 0) {
    const result2 = await promise2();
    return await promise3(result2);
  } else {
    return await promise3(result1);
  }
};

const promises = array.map(processItem);

Promise.all(promises).then(() => {
  console.log("all promises finished");
});


您可以继续添加在
for循环
内的列表中创建的
承诺

完成循环后,可以注册
Promise.all
方法

let list_of_promises = [];

for(...) {
    list_of_promises.push(
        new Promise(function(resolve, reject)) {
            ...
        }
    )
}

Promise.all(list_of_promises).then(function(data)) {
    ...
}.catch(function(err) {
    ...
});
如果所有的
承诺
都得到解决,
。那么将调用
方法


注意:即使您的一个承诺失败,它也会进入
.catch
方法。

您可以继续添加您在
for循环内的列表中创建的
承诺

let list_of_promises = [];

for(...) {
    list_of_promises.push(
        new Promise(function(resolve, reject)) {
            ...
        }
    )
}

Promise.all(list_of_promises).then(function(data)) {
    ...
}.catch(function(err) {
    ...
});
完成循环后,可以注册
Promise.all
方法

let list_of_promises = [];

for(...) {
    list_of_promises.push(
        new Promise(function(resolve, reject)) {
            ...
        }
    )
}

Promise.all(list_of_promises).then(function(data)) {
    ...
}.catch(function(err) {
    ...
});
如果所有的
承诺
都得到解决,
。那么将调用
方法


注意:即使其中一个承诺失败,它也会进入
.catch
方法。

如果导入异步模块,可以创建异步瀑布来顺序处理承诺。如果导入异步模块,可以创建异步瀑布来顺序处理承诺。
let list_of_promises = [];

for(...) {
    list_of_promises.push(
        new Promise(function(resolve, reject)) {
            ...
        }
    )
}

Promise.all(list_of_promises).then(function(data)) {
    ...
}.catch(function(err) {
    ...
});