异步/等待函数,fs.readfile 并将其存储到变量 [重复]
Posted
技术标签:
【中文标题】异步/等待函数,fs.readfile 并将其存储到变量 [重复]【英文标题】:Async/Await Function, fs.readfile and store it to a variable [duplicate] 【发布时间】:2018-11-03 17:43:39 【问题描述】:const fs = require('fs');
// const util = require('util');
let text = ``;
const files = [`head.txt`,`body.txt`,`leg.txt`,`feet.txt`];
let head,body,leg,feet = ``;
//const readFile = util.promisify(fs.readFile);
function isCompleted(err,data)
if (err)
throw err;
text = data.toString();
proceedData()
function proceedData()
console.log(text);
return text;
function readFileBody()
fs.readFile(files[1], 'utf8', isCompleted);
async function printFiles ()
//head = await fs.readFile(files[0], 'utf8', (err,data) => if (err) throw err;else head += ` $data`);
body = await readFileBody();
//await fs.readFile(files[2], 'utf8', isCompleted);
//await fs.readFile(files[3], 'utf8', isCompleted);
printFiles();
当我在全局范围内使用 console.log(body) 时,它会返回一个 undefined。 当我在本地 printFile 函数中 console.log(body) (不返回)时,它也会返回一个 undefined,但我在本地 isCompleted 中的 console.log(text) 时,它会返回一个文本文件的值。
如何将文本文件的值存储到变量中?
【问题讨论】:
【参考方案1】:fs.readFile
不会返回一个承诺,即使它返回了,你也不会返回它,这就是 body
未定义的原因。而且您将回调与承诺混合在一起。删除isCompleted
或await
。
要将它与await
一起使用,您可以使用util.promisify
将基于回调的函数转换为基于promise 的函数。
const promisify = require('util');
const readFIle = promisify(fs.readFile);
function readFileBody()
return readFile(files[1], 'utf8');
// ^^ you need to return the promise
async function printFiles ()
body = await readFileBody();
在节点 >= 10 中,您可以使用fs/promises
来避免promisify
const fs = require('fs').promises;
function readFileBody()
return fs.readFile(files[1], 'utf8');
【讨论】:
以上是关于异步/等待函数,fs.readfile 并将其存储到变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
模板引擎不关心内容之——art-template,碰见的同步与fs.readFile异步以及函数回调问题的描述,针对fs的readfille读取文件时,返回不了异步函数返回值的解决方法