是否将我的代码包装在承诺中

Moh*_*yeb 1 javascript node.js promise async-await

我整天脑子里都在想这个问题,我是一个初学 nodejs 开发人员,我想知道什么时候我应该把我的代码包装在一个使用 async/await 的承诺中,什么时候我不应该......让我们举个例子,我有两个文件:

索引.js

        var mailer = require('../mailer')
        var mailOptions = mailer.mailOptions(......)
        mailer.sender(mailOptions)
Run Code Online (Sandbox Code Playgroud)

邮件程序.js:

module.exports.mailOptions = (.......) => {
....
}

module.exports.sender = (mailOptions) => {

    transporter.sendMail(mailOptions, callback(err, info))
}

function callback(err, info) {
}
Run Code Online (Sandbox Code Playgroud)

我应该将 sender 函数包装在一个承诺中,像这样调用它:

await mailer.sender(mailOptions)
Run Code Online (Sandbox Code Playgroud)

或者我的例子很好,我不需要承诺?希望你明白我的意思



编辑:

我正在使用 npm 中的 nodemailer 包:https ://www.npmjs.com/package/nodemailer

Mar*_*yer 5

根据文档,如果没有给出回调,Node Mailer 将返回一个承诺(https://nodemailer.com/usage/)。这使得一切都非常好用。例如,您可以在 mailer.js 中执行此操作:

// just return the promise from sendMail() 
module.exports.sender = (mailOptions) => transporter.sendMail(mailOptions)
Run Code Online (Sandbox Code Playgroud)

然后你可以使用它 withawait或 withthen()

try{
    let info = await mailer.sender(mailOptions)
    console.log(info.messageId) // etc
} catch(err){
    console.log("Error:", err)
}
Run Code Online (Sandbox Code Playgroud)

或者

mailer.sender(mailOptions)
.then(info => console.log(info.messageId)
.catch(err => console.log("Error:", err)
Run Code Online (Sandbox Code Playgroud)