为什么退出过程在循环结束之前执行?

时间:2019-01-09 20:31:54

标签: javascript node.js asynchronous sequelize.js

我来自Ruby,所以花了一天的时间弄清楚为什么process.exit(1)在循环结束之前执行。有什么想法需要改变才能使其生效吗?

export default async () => {
    const workbook = Xlsx.readFile(path.join(__dirname, './excel.xlsx'));
    const data = Xlsx.utils.sheet_to_json(workbook.Sheets.Extract, {
        header: getHeaderFor(workbook.Sheets.Extract),
    });
    await data.map(async (product, index) => {
        if (index < 6) return;
        await processProduct(product);
    });
    process.exit(1);
};

2 个答案:

答案 0 :(得分:5)

我认为如果您替换:

await data.map(async (product, index) => {
    if (index < 6) return;
    await processProduct(product);
});

使用

for (let i = 6; i < data.length; i++) {
  await processProduct(data[i]);
}

您的问题将得到解决

答案 1 :(得分:1)

虽然@codtex的答案有效,但由于循环的每次迭代都将等到之前的迭代,因此也会导致性能不佳。您真正想做的是收集所有的Promise,然后等待它们完成:

const promises = data.map((product, index) => {
  if (index < 6) return;
  return processProduct(product);
});

await Promise.all(promises);