【问题标题】:NodeJS Async call inside regular callback VS callback常规回调VS回调中的NodeJS异步调用
【发布时间】:2017-10-01 23:24:20
【问题描述】:

这两种等待数据库查询结束和执行后续代码的方式在性能内存方面是否存在差异? 请注意,它无论如何都包含在常规的非异步函数中。

版本 1(async / await 包装在常规函数中):

controller.on('message_received', function (message) {
    console.log("event:message_received, facebook_postback");
    newMessage(bot, message);
});


async function newMessage(bot, message) {
    try {
        const user = await User.findOne({
            where: { uid: message.user }
        });

       console.log('done');
    }
    catch (error) {
        console.error(error);
    }
}

第 2 版(无异步/等待):

controller.on('message_received', function (message) {
    console.log("event:message_received, facebook_postback");
    newMessage(bot, message);
});


function newMessage(bot, message) {
        const user = User.findOne({
            where: { uid: message.user }
        }, function(result) {
            console.log('done');
        }, function(error) {
            console.log(error);
        });
    }
}

【问题讨论】:

  • User.findOne 返回什么?你打算用user做什么?
  • 不,它们在功能上并不相同。一个捕获awaited 拒绝,另一个仅捕获同步异常。内存和性能无关紧要,只要它们不做同样的事情。
  • 那么User.findOne 同时支持promise 和callback 接口? newMessage 的返回值仍然存在差异,但您似乎并不关心这一点 - 但是当您这样做时,async/await 语法将更加可重用。

标签: javascript node.js async-await async.js


【解决方案1】:

有相同的,我不认为性能上应该有任何差异,因为async/await 只是一些syntactic sugar 与promise 一起工作,我没有看到使用Promises 的任何性能问题。 Callback 函数。

async/await 版本绝对具有更好的可读性,因此更易于理解和使用。

当它以异步方式执行时,也很容易遵循同步流样式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2017-05-28
    相关资源
    最近更新 更多