gpt4 book ai didi

javascript promise 在两个地方拒绝

转载 作者:行者123 更新时间:2023-12-01 01:24:37 25 4
gpt4 key购买 nike

我使用基于 Promise 的库,例如 moment.jsaxios。这次我想自己创造一个 promise 。

我有一个发送电子邮件的功能。我想要的只是如果没有错误则解决 promise ,如果有错误则拒绝 promise 。

export default async function password_reset_request(email, user_name, link) {
return new Promise((resolve, reject) => {
try {

var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'something@gmail.com',
pass: 'secret'
}
});

transporter.sendMail(mailOptions, function (error, info) {
if (error) {
reject()
} else {
resolve()
}
});
} catch (error) {
reject()
}
})
}

这个技术正确吗?我的 promise 在两个地方被拒绝了。

最佳答案

几个问题:

  • 如果不使用 await,则不需要 async 函数。您的函数已经返回一个 promise ,因此不需要异步
  • Promise 构造函数回调函数中不需要有 try...catch block :如果其中发生异常,它将自动转换为拒绝,并以错误为原因。注意:then 回调也遵循同样的原则。

您为 sendMail 所做的 promise 是正确的。最佳实践是为此创建一个专用函数(因此无需 createTransport)。将有用的信息传递给 rejectresolve 也很好:

function sendMailPromise(transporter, mailOptions) {
return new Promise((resolve, reject) => {
transporter.sendMail(mailOptions, function (error, info) {
return error ? reject(error) : resolve(info);
});
})
}

export default function password_reset_request(email, user_name, link) {
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'something@gmail.com',
pass: 'secret'
}
});
return sendMailPromise(transporter, mailOptions);
}

有一些未使用的变量(emailuser_namelink)和似乎是全局的变量(mailOptions) code>):你需要改善这种情况。

关于javascript promise 在两个地方拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53911296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com