【发布时间】:2020-05-14 04:14:45
【问题描述】:
首先,我有一个异步函数,它在 MongoDB 数据库上记录消息。
async function log_message(sender, conversationId, text) {
try {
const msg = new Message({
sender: sender,
conversationId: conversationId,
text: text
});
await msg.save();
console.log("Done");
} catch (e) {
console.log("An error happened while logging the message: " + e)
}
}
现在,我有另一个异步函数,当我收到消息并负责处理它并获取一些数据时会触发它。 一旦触发此函数,我就会调用“log_message”将消息记录在我的数据库中,但我不想用 await 调用它,否则,我会等到“log_message”函数返回,然后再处理减慢消息的消息消息处理。
async getReply(username, message) {
log_message("user", username, message);
console.log("HI");
let reply = await this.rs.reply(username, message, this);
return reply;
}
尽管如此,Jetbrains Webstorm 还是给了我这个警告“缺少等待异步函数调用”。 现在,我做了一些测试,如果我在没有等待的情况下调用函数,系统会按预期运行,消息会得到处理,并且我的日志记录函数会异步地将数据写入数据库而不会中断。 相反,如果我在调用日志记录函数之前放置了 await 关键字,则主函数中代码的执行将暂停,直到数据库尚未写入。
有人可以告诉我,我打算使用 async/await 关键字的方式是否存在一些缺陷?
【问题讨论】:
-
完全没问题。如果需要,您可以在 IDE 中静默警告。
-
回答你的问题:像你一样使用它完全没问题。另一方面,您的
log_message不需要异步,因为它只是在消息保存后记录消息Done。我不会仅仅因为这个原因让它异步。 -
这能回答你的问题吗? Async function without await in Javascript
-
@ArunKumarSaini 不是async函数内部是否必须有await,而是async函数是否必须用await关键字调用
标签: javascript node.js asynchronous callback async-await