我目前正在使用React和Mongoose(MongoDB)开发一个应用程序,我上传了一个文本文件,其中包含大约9000多行JSON.每一行都很重要,我需要能够将其存储在数据库中,以便以后访问.

我设置了两个函数,一个读取文件,另一个 for each 请求创建一个模型并将其保存到MongoDB.

Function to read each line

const createAndReadFile = async (filePath) => {
    //create a read stream of the File
    let fileStream = fs.createReadStream(filePath, 'utf8');

    const rl = readline.createInterface({
        input: fileStream,
        crlfDelay: Infinity
    });

    for await (const line of rl) {
        let parsedJSONLine = JSON.parse(line);
            createAndAddToDB(parsedJSONLine);
    }
};

Function to add to the database each line

const createAndAddToDB = async (jsonRequest) => {
    try {
        let request = new Request(jsonRequest);

        await request.save();
    } catch (error) {}
};

My question is, what's the most effective way to wait until all the lines have been converted to a model and saved in the database ?

推荐答案

使用Promise.all等待在for await循环中创建的所有promise 的解决:

var promises = [];
for await (const line of rl) {
  let parsedJSONLine = JSON.parse(line);
  promises.push(createAndAddToDB(parsedJSONLine));
}
return Promise.all(promises);

或者,您可以在for await循环中执行转换,并批量写入数据库:

var promises = [];
for await (const line of rl) {
  let parsedJSONLine = JSON.parse(line);
  promises.push(convertToDBFormat(parsedJSONLine));
}
return Promise.all(promises).then(function(converted) {
  return addToDBBatch(converted);
});

Node.js相关问答推荐

NX无法使用缓存运行根级脚本

Mongoose-不会更新数组中的属性值

MongoDB上的updateOne和findOneAndUpdate在Node.js中无法正常工作

try 使用Express和连接池将数据插入MySQL数据库时出现拒绝访问错误

关于Node.js中的AES加密库的问题

如果我加入另一个公会且我的​​机器人已在其中,欢迎消息发送错误

有没有办法判断 UUID 是否是使用 node.js 中的特定命名空间生成的?

未授权使用联合身份未授权用户角色从 Amplify graphQL 访问类型 Y 上的 X

为什么运行 yarn 命令会出错 - yargs-parser的完整性判断失败

用户通过 oauth2 twitter 授权或通过Passport discord后如何重定向到 React/Vue 路由?

如何使用来自前一阶段的另一个数组的聚合mongoose 在数组中添加字段

表达限制资源属于特定用户的优雅方式

如何将使用 Gulp 的 node 部署到 heroku

如何将`yarn.lock`与`package.json`同步?

具有多个条件的mongoose 查找

如何从 npm 注册表中删除 npm 包?

npm package.json 操作系统特定脚本

安装Node.js 安装n 安装Node.js?

NodeJS / Express 中的module.exports和exports.methods是什么意思?

将音频从 Node.js 服务器流式传输到 HTML5