【问题标题】:Join methods to run at the same time - node js加入方法同时运行——node js
【发布时间】:2016-09-26 09:14:04
【问题描述】:

我是 node js 的新手,我的代码中有一个方法可以通过以下方式保存信息:

var saveInformation = function(query, update, options) {
  asyncTasks.push(function(done) {
    what.findOneAndUpdate(query, update, options, done)
  })
}

saveInformation(query, update, options)

我多次调用saveInformation方法,每次调用该方法都需要写入日志文件。最简单的方法是什么?

我尝试在之后添加我的日志(我正在使用 winston 模块),如下所示:

saveInformation(query, update, options)
logger.info('Hello')

但是,这有时会保存,有时不会(即它只会记录一次,但是此方法会在我的程序中运行多次)。

所以我想知道,有没有办法在 saveInformation 行中添加另一种方法以确保它们同时运行,所以当saveInformation 保存到数据库时,我也会创建一个日志?

【问题讨论】:

    标签: javascript node.js logging winston


    【解决方案1】:

    日志函数的调用应该在函数what.findeOneAndUpdate的回调中,本例中为done,这样每次操作后都会执行。

    // callback for findOneAndUpdate
    var done = function(err, result) {
        if(err) {
            throw err
        }
        logger.info('Result of findOneAndUpdate: ', result)
    }
    //
    
    // original code
    var saveInformation = function(query, update, options) {
        asyncTasks.push(function(done) {
            what.findOneAndUpdate(query, update, options, done)
        })
    }
    
    saveInformation(query, update, options)
    

    这样,每当调用saveInformation 时,如果调用回调且没有错误,则将调用记录器,您也可以根据需要修改它以记录错误。

    【讨论】:

    • 我知道你在那里做了什么,但是在我的情况下,每个 logger.info 都有不同的内容,所以我想我不能为每个记录器设置不同的 done 变量。因为会有很多。还有其他解决方案吗?
    • @deeveeABC 如果您希望在 findAndUpdate 操作发生后打印日志记录语句,它必须在其回调中。因此,您必须想办法将要记录的消息发送到回调函数。你也可以在调用之前做一个日志语句,说明保存 X 的操作正在启动,而在回调中的另一个语句说明操作 Y 已成功完成或出错。它可以包含正在保存的模型中的数据,以便您可以区分消息。
    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2016-08-06
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多