gpt4 book ai didi

javascript - 异步函数是否总是需要使用await 来调用?

转载 作者:太空宇宙 更新时间:2023-11-03 22:03:43 24 4
gpt4 key购买 nike

首先是一些上下文,我有一个异步函数,它在 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”将消息记录到数据库中,但我不想用等待调用它,否则,我会等到“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 关键字的使用方式是否存在一些缺陷吗?

最佳答案

如果您的逻辑不需要async 调用的结果,则没有必要。尽管您的情况不需要,但 documentation列出了启用该警告的两个好处:

While this is generally not necessary, it gives two main benefits. The first one is that you won't forget to add 'await' when surrounding your code with try-catch. The second one is that having explicit 'await' helps V8 runtime to provide async stack traces

关于javascript - 异步函数是否总是需要使用await 来调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59953976/

24 4 0
文章推荐: css - Div 没有出现在前面 : Z-Index
文章推荐: html - 显示行内 block
文章推荐: html - 需要父