javascript - 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);
解决方案
以读取模式打开文件
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()
推荐阅读
- laravel - 使用范围的 Laravel 集合过滤器
- java - 无法解决java中的xml实体扩展问题
- java - 如何查看使用 MouseListener 按住 JButton 的时间
- css - 为图像提供圆形背景而不进行裁剪
- sql - 如果按序列分组不同,则聚合值不同
- javascript - Eslint“半”规则不检查类方法的结尾
- android - requestLocationUpdates(例如 10 000 毫秒)不影响 GnssMeasurementEvent.CallBack onGnssMeasurementsReceived() 更新间隔
- java - 有没有办法在 Java 中使用泛型参数自己的泛型参数?
- php - openssl_x509_fingerprint():无法从参数 1 获取证书
- php - crypt 函数 PHP 以普通形式显示盐