Return 来自节点中外部调用的 fs.Readfile() 的值
Return value from externally called fs.Readfile() in node
我正在尝试从函数中获取一个值 returned,在该函数中我使用 fs.readFile/writeFile 在 Node.
中读取和写入文件
在我的主 server.js 文件中,收到一个请求,然后我想从另一个名为 sendEmail.js:
的文件发送一封电子邮件
const fs = require('fs')
const sendMail = require('./sendEmail')
async function sendAnEmail() {
let resultOfSend = await sendMail.sendEmail()
resultOfSend.then((result)=>{
// return the result
}
}
sendAnEmail();
在 sendEmail 中,我首先读取一个文件以获取要发送到的电子邮件,
然后写入第二个文件
然后,如果一切正常,我会发送一封电子邮件(从一个单独的函数):
async function sendEmail() {
// Check if user exists
fs.readFile('./file.json', (err, data) => {
if(err) {
throw error
}
else {
let users = JSON.parse(data)
let dataToWrite = JSON.stringify(users)
fs.writeFile('./file2.json', dataToWrite, (err) => {
if(err) {
console.error(err)
throw error
}
else {
return generateEmail(users)
.then((info) => {
return info
})
.catch(console.log('err'))
}
})
}
})
}
async function generateEmail(user) {
let msgText = 'hello world'
// Set the mail options
const mailOptions = {
...
}
// Send the mail
let info = await transporter.sendMail(mailOptions)
return info
}
module.exports = {sendEmail}
我无法获得 resultOfSend 变量的值。一直返回未定义,我想是因为承诺还没有实现。
如何从 sendEmail 函数返回 return 的值返回调用它的 server.js 文件?
您在 sendEmail
中使用了 await 和 async 但没有 returning 任何 Promise
(因此 sendEmail
函数没有 return 任何东西这就是你得到 undefined
的原因)。
尽管如此,即使您使用了 await
.
,您仍试图调用 .then()
的响应
所以你应该:
- return
sendEmail
函数中的 Promise。
- 决定你想如何处理它,如果你使用 async-await 然后不要使用
.then()
并且只分析变量,反之亦然。
generateEmail()
函数也应该returnPromise
.
例如:
async function sendEmail() {
return new Promise((resolve, reject) => {
// Check if user exists
fs.readFile('./file.json', (err, data) => {
if(err) {
reject()
}
else {
let users = JSON.parse(data)
let dataToWrite = JSON.stringify(users)
fs.writeFile('./file2.json', dataToWrite, (err) => {
if(err) {
console.error(err)
reject()
}
else {
generateEmail(users)
.then((info) => {
resolve(info)
})
.catch(
console.log('err')
reject()
)
}
})
}
})
})
}
我正在尝试从函数中获取一个值 returned,在该函数中我使用 fs.readFile/writeFile 在 Node.
中读取和写入文件在我的主 server.js 文件中,收到一个请求,然后我想从另一个名为 sendEmail.js:
的文件发送一封电子邮件const fs = require('fs')
const sendMail = require('./sendEmail')
async function sendAnEmail() {
let resultOfSend = await sendMail.sendEmail()
resultOfSend.then((result)=>{
// return the result
}
}
sendAnEmail();
在 sendEmail 中,我首先读取一个文件以获取要发送到的电子邮件, 然后写入第二个文件 然后,如果一切正常,我会发送一封电子邮件(从一个单独的函数):
async function sendEmail() {
// Check if user exists
fs.readFile('./file.json', (err, data) => {
if(err) {
throw error
}
else {
let users = JSON.parse(data)
let dataToWrite = JSON.stringify(users)
fs.writeFile('./file2.json', dataToWrite, (err) => {
if(err) {
console.error(err)
throw error
}
else {
return generateEmail(users)
.then((info) => {
return info
})
.catch(console.log('err'))
}
})
}
})
}
async function generateEmail(user) {
let msgText = 'hello world'
// Set the mail options
const mailOptions = {
...
}
// Send the mail
let info = await transporter.sendMail(mailOptions)
return info
}
module.exports = {sendEmail}
我无法获得 resultOfSend 变量的值。一直返回未定义,我想是因为承诺还没有实现。
如何从 sendEmail 函数返回 return 的值返回调用它的 server.js 文件?
您在 sendEmail
中使用了 await 和 async 但没有 returning 任何 Promise
(因此 sendEmail
函数没有 return 任何东西这就是你得到 undefined
的原因)。
尽管如此,即使您使用了 await
.
.then()
的响应
所以你应该:
- return
sendEmail
函数中的 Promise。 - 决定你想如何处理它,如果你使用 async-await 然后不要使用
.then()
并且只分析变量,反之亦然。 generateEmail()
函数也应该returnPromise
.
例如:
async function sendEmail() {
return new Promise((resolve, reject) => {
// Check if user exists
fs.readFile('./file.json', (err, data) => {
if(err) {
reject()
}
else {
let users = JSON.parse(data)
let dataToWrite = JSON.stringify(users)
fs.writeFile('./file2.json', dataToWrite, (err) => {
if(err) {
console.error(err)
reject()
}
else {
generateEmail(users)
.then((info) => {
resolve(info)
})
.catch(
console.log('err')
reject()
)
}
})
}
})
})
}