首页 > 解决方案 > JavaScript:读取文件后尝试返回字符串时未定义类型

问题描述

我是 JavaScript 新手并在 Node.JS v12.13.1 中编写 JS 代码。

我正在尝试异步读取文件并通过承诺返回字符串值。

到目前为止,大多数函数都返回 undefined 值,而其他函数则返回 [object Promise] 值。

writeFile 函数有效,我可以验证 out.txt 是否包含“测试数据”

我对堆栈溢出帖子进行了研究,我只是感到困惑。
如何正确读取带有 async/await 的文件?
在 node.js 中使用带有 async / await 的文件系统 在
循环中使用带有 fs.readFile 的 Promises

API 文档:
https ://nodejs.org/api/fs.html#fs_fs_promises_api

有人可以告诉我我缺少什么吗?我将不胜感激,因为我已经进行了大约 3 天的反复试验研究。

谢谢!

function writeFile(data) {
    const fs = require('fs');
    fs.writeFile('out.txt', data, (err) => {
        if (err) throw err;
    });
}

function readFile1() {
    const fs = require('fs').promises;
    (async() =>  {
    try {
      const result = await fs.readFileSync('out.txt', 'utf8');
      console.log(result);
   } catch(e) {
      console.error(e);
   }
    })();
}

function readFile2() {
    const fs = require('fs');
    const { promisify } = require('util');
    const readFile = promisify(fs.readFile);

    (async() =>  {
    try {
        const result = await readFile('out.txt', 'utf8');
        console.log(result);
    } catch(e) {
        console.error(e);
    }
    })();
}

function readFile3() {
    const fs = require('fs');
    const util = require('util');
    const readFile = util.promisify(fs.readFile);

    function getStuff() {
        return readFile('out.txt', 'utf8');
    }
    getStuff().then(data => {
        console.log("Inside getStuff Method: "+data);
    })
}

function readFile4() {
    const fs = require('fs');    
    const fsPromises = fs.promises;
  try {  
    return fsPromises.readFile('out.txt');
  } catch (err) {
    console.error('Error occured while reading file!', err);
  }
}

async function readFile5() {
    const fs = require('fs');
    const fsPromises = fs.promises;
    let fileHandle = null;
    try {
        fileHandle = await fsPromises.open('out.txt');
        await fileHandle.readFile();
    } finally {
        if (fileHandle) {
            await fileHandle.close();
        }
    }
    return fs.readFileSync('out.txt', 'utf8');
}

writeFile("Test Data");
myString = readFile5();
console.log("The String Value is: " + myString);

标签: javascriptnode.jsasynchronouspromise

解决方案


以读取模式打开文件

fileHandle = await fsPromises.open('out.txt','r');

然后。

你可以像下面那样做

 async function getPromiseResolved() {
    writeFile("Test Data");
    myString =  await readFile5();
    console.log("The String Value is: " + myString);
    }

getPromiseResolved()

https://stackoverflow.com/a/29516570/6302996

完整代码

// This is your Editor pane. Write your JavaScript here and 
// use the command line to execute commands

function writeFile(data) {
  const fs = require('fs');
  fs.writeFile('out.txt', data, (err) => {
    if (err) throw err;
  });
}

async function readFile5() {
  const fs = require('fs');
  const fsPromises = fs.promises;
  let fileHandle = null;
  try {
    fileHandle = await fsPromises.open('out.txt', 'r');
    await fileHandle.readFile();
  } finally {
    if (fileHandle) {
      await fileHandle.close();
    }
  }
  var myString = await fs.readFileSync('out.txt', 'utf8');
  return myString;
}
async function getPromiseResolved() {
  writeFile("Test Data");
  myString = await readFile5();

  console.log("The String Value is: " + myString);
}

getPromiseResolved()


推荐阅读