【发布时间】: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