【问题标题】:Async/Await Function, fs.readfile and store it to a variable [duplicate]异步/等待函数,fs.readfile 并将其存储到变量 [重复]
【发布时间】: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) 时,它会返回一个文本文件的值。

如何将文本文件的值存储到变量中?

【问题讨论】:

    标签: javascript node.js async-await fs


    【解决方案1】:

    fs.readFile 不会返回一个承诺,即使它返回了,你也不会返回它,这就是 body 未定义的原因。而且您将回调与承诺混合在一起。删除isCompletedawait

    要将它与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');
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2023-03-13
      • 1970-01-01
      • 2018-09-19
      • 2017-04-06
      相关资源
      最近更新 更多