javascript - 为什么我的退出进程在循环结束之前执行?

标签 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);
};

最佳答案

我认为如果你更换:

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]);
}

你的问题将会得到解决。

一些解释: javascript 的映射函数在为源数组的每个元素调用回调函数并将回调的返回值插入结果数组时,会从源数组创建新数组。在这种情况下,await data.map(... 是无效语句,因为 map 的结果是数组。要解决此问题,可以将结果包装在 await Promise.all(data.map(...)) 中或使用普通的 for 循环。当您不关心并发时,可以使用第一种情况,当您想要实现顺序时,可以使用第二种情况。

关于javascript - 为什么我的退出进程在循环结束之前执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54117890/

相关文章:

javascript - 简化 semver 版本比较逻辑

javascript - 使多个元素在放置时可见

字符串中包含 '/' 的 JavaScript 正则表达式

node.js - 如何在实时添加对象时从 Redis 中弹出对象?

javascript - 需要输入两个单词并用空格分隔

javascript - 将 obj 推送到 arr 时函数输出奇怪的结果

javascript - 编写一个更新/保存的 Mongoose 方法?

javascript - 替换函数中的异步加载

node.js - nodejs(libuv)如何在一个线程中执行所有操作

c# - C#异步服务器套接字的奇怪性能