Node.js 异步读取文件
我试图使用Node.js 异步读取文件,node.js,Node.js,我试图使用fs.readFile()读取一个文件,然后在下面的代码中使用结果。读取过程必须是异步的。以下是我到目前为止的情况: var file = async () => { await fs.readFile(__dirname + "/file.json", "utf-8", (err, data) => { if (err) throw err return JSON.parse(data) }) } conso
fs.readFile()
读取一个文件,然后在下面的代码中使用结果。读取过程必须是异步的。以下是我到目前为止的情况:
var file = async () => {
await fs.readFile(__dirname + "/file.json", "utf-8", (err, data) => {
if (err) throw err
return JSON.parse(data)
})
}
console.log(file());
由于某些原因,此代码总是记录未定义的
。有没有办法在不移动readFile
回调中的console.log
语句的情况下执行此操作?值得注意的修改:
fs.promises.readFile=>如果不使用承诺,请不要使用等待。
如果你使用承诺=>不要使用回调
async function readFile() {
const data = await fs.promises.readFile(__dirname + "/file.json", "utf-8");
return JSON.parse(data)
}
(async() => {
console.log(await readFile());
})();
有关同步版本,请参阅其他注释。(但出于性能原因,我更喜欢异步)值得注意的修改:
fs.promises.readFile=>如果不使用承诺,请不要使用等待。
如果你使用承诺=>不要使用回调
async function readFile() {
const data = await fs.promises.readFile(__dirname + "/file.json", "utf-8");
return JSON.parse(data)
}
(async() => {
console.log(await readFile());
})();
有关同步版本,请参阅其他注释。(但出于性能原因,我更喜欢异步)使用Promise
const someFunction = async () => {
try {
var file = () => {
return new Promise((resolve, reject) => {
fs.readFile(__dirname + "/file.json", "utf-8", (err, data) => {
if (err) reject(err)
else resolve(data)
})
})
}
console.log(await file()); // this is the key
} catch (err) {
console.log(err)
}
}
您需要添加一个try catch
块来捕获reject
承诺或抛出的任何错误。所以更好
还是旧的函数样式
async function someFunction() {
// the contents are the same
// ...
}
问题是,文件()
异步运行,代码不等待结果。将await
放在fs.readFile()
函数上并不意味着等待file()
变量完成其执行。使用Promise
const someFunction = async () => {
try {
var file = () => {
return new Promise((resolve, reject) => {
fs.readFile(__dirname + "/file.json", "utf-8", (err, data) => {
if (err) reject(err)
else resolve(data)
})
})
}
console.log(await file()); // this is the key
} catch (err) {
console.log(err)
}
}
您需要添加一个try catch
块来捕获reject
承诺或抛出的任何错误。所以更好
还是旧的函数样式
async function someFunction() {
// the contents are the same
// ...
}
问题是,
文件()
异步运行,代码不等待结果。将wait
放在fs.readFile()
函数上并不意味着等待file()
变量完成其执行。在您的代码中,上面的file
变量是一个函数。特别是函数async()…
。您的代码类似于编写异步函数文件(){…}
。也就是说,file
是函数名,那么async
应该放在哪里呢?因为即使是console.log(file())
也不起作用。async
关键字只会使函数返回一个承诺。所以你的文件
函数将返回一个承诺。哦,好的。那么如何异步获取文件数据呢?您应该在记录结果之前等待结果,const result=wait file();console.log(result)在文件上方的代码中是一个函数。特别是函数async()…
。您的代码类似于编写异步函数文件(){…}
。也就是说,file
是函数名,那么async
应该放在哪里呢?因为即使是console.log(file())
也不起作用。async
关键字只会使函数返回一个承诺。所以你的文件
函数将返回一个承诺。哦,好的。那么如何异步获取文件数据呢?您应该在记录结果之前等待结果,const result=wait file();console.log(结果)