Fra*_*ETH 0 javascript node.js async-await
我想知道这个承诺是否可以。因为我正在使用await它们内部。
示例1:
new Promise(async (resolve, reject) => {
await fetch(url, postReq)
.then((data) => {
return data.json();
})
.then((res) => {
console.log(res);
resolve("Message sent successfully");
})
.catch((error) => {
console.log(error);
reject(error);
});
});
Run Code Online (Sandbox Code Playgroud)
示例2:
const sendEmail = async (reciever, data) => {
new Promise(async (resolve, reject) => {
console.log("Sending Email");
try {
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: process.env.EMAIL_ADDRESS,
pass: process.env.EMAIL_PASSWORD,
},
});
// send mail with defined transport object
let info = await transporter.sendMail({
from: '', // sender address
to: `${reciever}`, // list of receivers
subject: "", // Subject line
text: ``, // plain text body
html: ``, // html body
});
console.log("Message sent: %s", info.messageId);
resolve("Email Sent")
} catch (err) {
console.log(err);
reject(err);
}
});
};
Run Code Online (Sandbox Code Playgroud)
如果我不使用await,我将无法读取,info.messageId因为它未定义。
这些示例都不是正确的处理方式:
.then()和await。这样做会使控制流、可读性以及正确的错误处理变得复杂。您通常应该为给定的函数选择一种控制流模型或另一种。async,也不要await在其中使用它。如果您想这样做,那么说明其他问题是错误的,并且您可能根本不需要new Promise()这里的情况(因为您显然已经有了不应重新包装的承诺)。示例1可以是这样的:
const response = await fetch(url, postReq);
const data = await response.json();
return data;
Run Code Online (Sandbox Code Playgroud)
甚至只是这样:
const response = await fetch(url, postReq);
return response.json();
Run Code Online (Sandbox Code Playgroud)
示例2可以是这样的:
const sendEmail = async (reciever, data) => {
console.log("Sending Email");
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: process.env.EMAIL_ADDRESS,
pass: process.env.EMAIL_PASSWORD,
},
});
// send mail with defined transport object
const info = await transporter.sendMail({
from: '', // sender address
to: `${reciever}`, // list of receivers
subject: "", // Subject line
text: ``, // plain text body
html: ``, // html body
});
console.log("Message sent: %s", info.messageId);
return info;
};
Run Code Online (Sandbox Code Playgroud)