在没有等待的情况下调用异步函数的缺点

lcs*_*hes 5 javascript node.js async-await

给出异步代码

async function wierdFunction(){
    setTimeout(function(){
        //background process that does not return
        //Russian roulette
        if ( Math.random() > 0.99 )
            throw new Error('Bang!');
    }, 3000);
}
Run Code Online (Sandbox Code Playgroud)

我只需要异步调用这个函数,我不需要知道它什么时候完成。

app.post('/wierd-endpoint', function (req,res){
    wierdFunction();
    res.json({status:"Running. Now, go away."});
});
Run Code Online (Sandbox Code Playgroud)

有没有建议不要在没有await关键字的情况下调用它?

jfr*_*d00 6

async只需从 中删除wierdFunction(). 如果您没有使用返回的承诺并且没有使用await内部,那么就没有理由拥有它。它只是为返回创建一个额外的promise对象,然后该对象被垃圾收集,因此它会产生额外的开销,并且它向调用者暗示调用者可以使用该承诺来做一些有用的事情。

有没有建议不要在没有await关键字的情况下调用它?

如果您的操作确实是“即发即忘”,并且您不关心完成或报告错误,那么它不需要返回承诺,您可以将其设为启动异步操作的普通函数,但不报告任何结果。

但是,您必须绝对确保被拒绝的 Promise 永远不会得不到处理,因为这可能会导致 Nodejs 关闭。因此,即使是即发即忘的情况也需要确保可能发生的任何错误都在某处得到处理。