常规回调 VS 回调中的 NodeJS 异步调用
NodeJS Async call inside regular callback VS callback
这两种等待数据库查询结束并执行后续代码的方式在性能或内存方面是否存在差异?
请注意,它无论如何都包含在常规的非异步函数中。
版本 1(包含在常规函数中的异步/等待):
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);
});
}
}
有相同的,我认为性能上应该没有任何差异,因为 async/await
只是一些 syntactic sugar
来处理承诺,我没有看到任何性能问题关于使用 Promises
而不是 Callback
函数。
但是 async/await
版本确实具有更好的可读性,因此更易于理解和使用。
在以异步方式执行时也很容易遵循同步流样式。
这两种等待数据库查询结束并执行后续代码的方式在性能或内存方面是否存在差异? 请注意,它无论如何都包含在常规的非异步函数中。
版本 1(包含在常规函数中的异步/等待):
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);
});
}
}
有相同的,我认为性能上应该没有任何差异,因为 async/await
只是一些 syntactic sugar
来处理承诺,我没有看到任何性能问题关于使用 Promises
而不是 Callback
函数。
但是 async/await
版本确实具有更好的可读性,因此更易于理解和使用。
在以异步方式执行时也很容易遵循同步流样式。