Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 多个函数的nodejs异步/等待放置_Node.js_Asynchronous - Fatal编程技术网

Node.js 多个函数的nodejs异步/等待放置

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

编程新手,我有一些关于异步的问题,请等待。 下面代码中的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, 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_回调不是异步函数,那个么它是正常函数,不会抛出错误