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

Javascript 是否将我的代码包装在承诺中,javascript,node.js,promise,async-await,Javascript,Node.js,Promise,Async Await,我一整天都在思考这个问题,我是一个初学者nodejs开发人员,我想知道什么时候应该将我的代码封装在使用async/await的承诺中,什么时候不应该。。。 举个例子,我有两个文件: index.js var mailer = require('../mailer') var mailOptions = mailer.mailOptions(......) mailer.sender(mailOptions) mailer.js: module.e

我一整天都在思考这个问题,我是一个初学者nodejs开发人员,我想知道什么时候应该将我的代码封装在使用async/await的承诺中,什么时候不应该。。。 举个例子,我有两个文件:

index.js

        var mailer = require('../mailer')
        var mailOptions = mailer.mailOptions(......)
        mailer.sender(mailOptions)
mailer.js:

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

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

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

function callback(err, info) {
}
我是否应该将sender函数包装在一个承诺中,这样调用它:

await mailer.sender(mailOptions)
或者我的榜样很好,我不需要承诺? 希望你明白我的意思



编辑:

我正在使用npm的nodeEmailer包:

基本上就是你认为最好看的。正如您所注意到的,
async
wait
在幕后使用承诺。通常我会说,当你有一个清晰的线性顺序,你希望事情发生时,Promissions和
async
/
Wait
看起来最好,而当事情可能以不同的顺序发生或可能在多个场合不断被回调时,回调看起来更好。在你的例子中,我会说等待,承诺会很有效,因为逻辑是线性的:“发送电子邮件,然后做点什么。”

这基本上是你认为最好的。正如您所注意到的,
async
wait
在幕后使用承诺。通常我会说,当你有一个清晰的线性顺序,你希望事情发生时,Promissions和
async
/
Wait
看起来最好,而当事情可能以不同的顺序发生或可能在多个场合不断被回调时,回调看起来更好。在您的示例中,我会说
wait
,承诺会很好地工作,因为逻辑是线性的:“发送电子邮件,然后做点什么。”

基本上,您只希望在代码是异步的情况下使用promise对象包装代码。否则就没什么意义了

以下是mozilla对Promise的定义:

Promise表示异步操作的最终完成(或失败)及其结果值

wait关键字用于使同步代码等待promise或异步函数/变量(实际上在幕后用promise包装)

在您的情况下,如果mailer在幕后返回一个承诺,您可以对其使用wait(就像您所做的那样),而无需使用另一个承诺对象来包装它。另一方面,如果mailer没有回复承诺,你需要用承诺来包装它,以便能够等待它

在这两种情况下,它都描述了mailer是如何实现的。如果mailer在幕后是同步的,那么等待它不会有任何改变或意义,因为js引擎将以任何方式执行它synchronuousley


请提供有关mailer模块的更多信息,以便我们可以看到整个画面。

基本上,只有当代码是异步的时,您才会希望使用promise对象包装代码。否则就没什么意义了

以下是mozilla对Promise的定义:

Promise表示异步操作的最终完成(或失败)及其结果值

wait关键字用于使同步代码等待promise或异步函数/变量(实际上在幕后用promise包装)

在您的情况下,如果mailer在幕后返回一个承诺,您可以对其使用wait(就像您所做的那样),而无需使用另一个承诺对象来包装它。另一方面,如果mailer没有回复承诺,你需要用承诺来包装它,以便能够等待它

在这两种情况下,它都描述了mailer是如何实现的。如果mailer在幕后是同步的,那么等待它不会有任何改变或意义,因为js引擎将以任何方式执行它synchronuousley


请提供有关mailer模块的更多信息,以便我们可以看到整个画面。

根据文档,如果没有回调,Node mailer将返回承诺()。这使得一切都非常好的工作。例如,您可以在mailer.js中执行此操作:

// just return the promise from sendMail() 
module.exports.sender = (mailOptions) => transporter.sendMail(mailOptions)
然后您可以将其与
wait
Then()一起使用


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

// just return the promise from sendMail() 
module.exports.sender = (mailOptions) => transporter.sendMail(mailOptions)
然后您可以将其与
wait
Then()一起使用


你应该做任何你觉得舒服的事。async/await模式更容易阅读,但您不需要使用它。这是一个关于使用承诺与回调的问题,还是关于何时使用async/await(已经需要承诺)的问题?看起来您并没有提供函数
sendMail
,而是调用
callback()的结果
这似乎不对。还有,这是节点邮件器吗?如果你没有通过回拨,它不是已经返回了一个承诺吗?@link0047谈论更容易阅读的内容,我认为等待mailer.sender(mailOptions)或mailer.sender(mailOptions)都很容易阅读。。。如果没有,请说明容易的事情在哪里comes@Mark_M是的,我验证过了,但它不起作用,我只是给了
sendMail
一个匿名函数,它现在起作用了。。。所以在这一点上,我不能给它一个命名函数?你应该做任何你觉得舒服的事情。async/await模式更容易阅读,但您不需要使用它。这是一个关于使用承诺与回调的问题,还是关于何时使用async/await(已经需要承诺)的问题?看起来您并没有提供函数
sendMail
,而是调用
callback()的结果
这似乎不对。还有,这是节点邮件器吗?如果你没有通过回拨,它不是已经返回了一个承诺吗?@link0047谈论更容易阅读的内容,我认为等待mailer.sender(mailOptions)或mailer.sender(mailOptions)都很容易阅读。。。如果没有,请说明容易的事情在哪里comes@Mark_MY
mailer.sender(mailOptions)
.then(info => console.log(info.messageId)
.catch(err => console.log("Error:", err)