Node.js 在同步代码中使用异步函数
我正在使用一个名为的库来处理SQS消息。库希望消息处理程序如下所示:Node.js 在同步代码中使用异步函数,node.js,Node.js,我正在使用一个名为的库来处理SQS消息。库希望消息处理程序如下所示: handleMessage: (message, done) => { // do some work with `message` done(); } 另一方面,虽然我有异步代码 async function sendEmail() { return await ... } 有没有一种好方法可以在handleMessage中运行sendEmail,等待它完成,然后调用done?您可以在回调中
handleMessage: (message, done) => {
// do some work with `message`
done();
}
另一方面,虽然我有异步代码
async function sendEmail() {
return await ...
}
有没有一种好方法可以在
handleMessage
中运行sendEmail
,等待它完成,然后调用done
?您可以在回调中使用基于承诺的代码,如下所示:
handleMessage: (message, done) => {
// do some work with `message`
sendEmail().then(done).catch(...);
}
在某些情况下,您还可以为handleMessage()
创建一个新方法,该方法实际上期望返回一个承诺,并直接使用该承诺,而不是使用普通回调
另外,并不是说在函数末尾使用
return wait…
没有意义。您可以直接退还承诺:
handleMessage: async (message, done) => {
await sendEmail();
done();
}
因此,不是:
async function sendEmail() {
// other code here
return await someFuncThatReturnsPromise();
}
您只需执行以下操作:
async function sendEmail() {
// other code here
return someFuncThatReturnsPromise();
}
额外的
等待
不会增加任何价值或效用。您可以在回调中使用基于承诺的代码,如下所示:
handleMessage: (message, done) => {
// do some work with `message`
sendEmail().then(done).catch(...);
}
在某些情况下,您还可以为handleMessage()
创建一个新方法,该方法实际上期望返回一个承诺,并直接使用该承诺,而不是使用普通回调
另外,并不是说在函数末尾使用
return wait…
没有意义。您可以直接退还承诺:
handleMessage: async (message, done) => {
await sendEmail();
done();
}
因此,不是:
async function sendEmail() {
// other code here
return await someFuncThatReturnsPromise();
}
您只需执行以下操作:
async function sendEmail() {
// other code here
return someFuncThatReturnsPromise();
}
额外的
await
不会增加任何价值或效用。只要库不关心您从handleMessage返回的内容
,您也可以直接在handlerMessage函数中使用async/await:
handleMessage: async (message, done) => {
await sendEmail();
done();
}
只要库不关心您从handleMessage返回的内容,您也可以直接在handleMessage函数中使用async/await:
handleMessage: async (message, done) => {
await sendEmail();
done();
}
可能重复的注意事项是
return await
如果这是函数中使用的唯一await
,那么它是毫无意义的-只需使用标准函数即可,您可以简单地return
普通Promise
注意return await
的可能副本,如果这是您在函数中使用的唯一await
,那么它是毫无意义的-只需使用一个标准函数,您可以简单地return
普通Promise