Node.js 多个函数的nodejs异步/等待放置
编程新手,我有一些关于异步的问题,请等待。 下面代码中的Models.Callbacks.deleteOne是Mongoose数据库。。查询无论如何,它肯定是异步的,并返回一个承诺 Q1)下面的公式正确吗?特别是,delete\u callback中的任何错误是否会在do\u stuff中被捕获Node.js 多个函数的nodejs异步/等待放置,node.js,asynchronous,Node.js,Asynchronous,编程新手,我有一些关于异步的问题,请等待。 下面代码中的Models.Callbacks.deleteOne是Mongoose数据库。。查询无论如何,它肯定是异步的,并返回一个承诺 Q1)下面的公式正确吗?特别是,delete\u callback中的任何错误是否会在do\u stuff中被捕获 async function delete_callback(msg) { await Models.Callbacks.deleteOne({chat_id: msg.chat.id, fro
async function delete_callback(msg) {
await Models.Callbacks.deleteOne({chat_id: msg.chat.id, from_id: msg.from.id});
}
async function do_stuff(msg) {
try {
await some_other_async_function(msg);
delete_callback(msg);
}
catch(err) {
handleError(err);
}
}
目前,正如您所看到的,在删除回调中有一个等待,我可以删除它,而在调用删除回调(msg)时,在做东西中添加另一个等待
问题2)换句话说,如果我将其更改为下面的代码,它还会工作吗
async function delete_callback(msg) {
Models.Callbacks.deleteOne({chat_id: msg.chat.id, from_id: msg.from.id});
}
async function do_stuff(msg) {
try {
await some_other_async_function(msg);
await delete_callback(msg);
}
catch(err) {
handleError(err);
}
}
Q3)此外,如果delete\u callback首先不是一个异步函数,会发生什么情况,Models.Callbacks.deleteOne中的任何错误会被捕获吗??Q1
不,您不能在delete_回调中删除wait。在调用delete_回调时,还需要在do_stuff函数中添加wait,如下代码所示 下面的代码将成功
async function delete_callback(msg) {
await Models.Callbacks.deleteOne({chat_id: msg.chat.id, from_id: msg.from.id});
}
async function do_stuff(msg) {
try {
await some_other_async_function(msg);
// add await here
await delete_callback(msg);
}
catch(err) {
handleError(err);
}
}
问题2
您将触发该函数。但是您需要在delete_回调中添加wait或return。
否则,delete_回调函数将立即完成
async function delete_callback(msg) {
return Models.Callbacks.deleteOne({chat_id: msg.chat.id, from_id: msg.from.id});
}
async function do_stuff(msg) {
try {
await some_other_async_function(msg);
await delete_callback(msg);
}
catch(err) {
handleError(err);
}
}
下面是在test()函数中不添加wait或return的示例。此测试函数是您的delete\u回调函数
function b() {
return new Promise((resolve, reject) =>{
setTimeout(() => {
console.log("doing b");
resolve();
}, 5000)
})
}
async function test () {
b()
}
async function main() {
try {
let a = await test()
console.log("a: ", a);
} catch (error) {
console.log(error);
}
console.log("done");
}
main()
第三季度
若delete_回调不是异步函数,那个么它是正常函数,不会抛出错误