首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Promise.all进行异步操作--但是要立即操作这些操作

使用Promise.all进行异步操作--但是要立即操作这些操作
EN

Stack Overflow用户
提问于 2020-10-29 17:01:51
回答 1查看 44关注 0票数 0

我有一个文件,我通过line-by-line npm包逐行读取。我想在我的数据库中存储每一行(如果该行符合我的条件..)。我想异步地存储它,但也要等待数据库中的所有保存操作完成,然后再继续下一个操作。

这是我目前的代码:

代码语言:javascript
复制
const fs = require('fs');
const path = require('path');

const LineByLineReader = require('line-by-line');
const moment = require('moment');

const saveFunc = async (filePath) => {
    const savePromises = [];

    const LBLR = new LineByLineReader(filePath);

    LBLR.on('error', (error) => {
        throw (error);
    });

    LBLR.on('line', async (line) => {
        let lineJSON;
        try {
            lineJSON = JSON.parse(line);
        } catch (e) { } // Just skip the line if cannot be parsed

        if (!!lineJSON && 'caseId' in lineJSON && 'timestamp' in lineJSON && 'message' in lineJSON) {
            if (lineJSON['message'] === "Socket.io 'connection' event") {
                const logDateString = (lineJSON['timestamp'].split(' '))[0];
                const logTimestamp = moment(logDateString, 'DD-MM-YYYY').toDate();

                savePromises.push(new LivenessLog({
                    caseId: lineJSON['caseId'],
                    eventName: 'connect',
                    timestamp: logTimestamp,
                }).save());
            }
        }
    });

    await new Promise((resolve) => {
        LBLR.on('end', resolve);
    });

    await Promise.all(savePromises);
}

await saveLivenessLogs('..'); // X OPERATION -- !! --

因此,基本上,我希望立即执行.save()操作(当前不会执行,因为我将它的承诺推送给数组,所以只在执行时执行它)但是,只有在成功地执行了所有X OPERATION操作之后,我才想返回到.save()

EN

回答 1

Stack Overflow用户

发布于 2020-10-29 20:29:00

您需要在.then之后使用.save(),以便它能够立即执行(您想要的异步行为)

但同时,我们需要将结果承诺推送给savePromises数组,以便您可以在Promise.all的末尾使用它来确认所有查询都运行。

请试试这样的东西。

代码语言:javascript
复制
savePromises.push(new LivenessLog({
    caseId: lineJSON['caseId'],
    eventName: 'connect',
    timestamp: logTimestamp,
}).save().then(data => { return data; }));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64595863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档