我想编写一个脚本来读取文件并打印一些信息;下面代码的输出是:
PRE runAsync
POST runAsync
POST asyncResult:
结束
INSIDE FILE3 readFile回调函数...
该脚本不会打印文件FILE3的内容;问题出在哪里?我对promise / async / await感到困惑!我正在使用nodejs和打字稿。
import * as fs from "fs";
const FILE3 = "./sample3.txt";
async function readAsyncFile(FILE3: string): Promise<string> {
//const orWithVariable = function readPromise() {
let fileContent: string = "";
fs.readFile(FILE3, "utf8", (err, data) => {
console.log("INSIDE FILE3 readFile callback function...");
if (err) fileContent = "Error reading FILE3";
else fileContent = data;
});
return fileContent;
}
async function runAsync() {
let asyncResult: string = await readAsyncFile(FILE3);
console.log("POST asyncResult: " + asyncResult);
}
console.log("PRE runAsync");
runAsync().then(() => {
console.log("END");
});
console.log("POST runAsync");
预期输出应为:
PRE runAsync
POST runAsync
POST asyncResult:
->此处FILE3的内容 结束
INSIDE FILE3 readFile回调函数...
注意:我正在尝试使用nodejs和typscript来理解promise / await / async;有人可以告诉我从哪里开始吗?良好且简单的教程,包含大量示例?谢谢。
答案 0 :(得分:1)
让我们看一下异步读取:
async function readAsyncFile(FILE3: string): Promise<string> {
let fileContent: string = "";
...
return fileContent;
}
此函数直接返回一个字符串,但是它应该返回一个promise(我想Typescript应该对此有所警告)。
async function readAsyncFile(FILE3: string): Promise<string> {
let fileContent = new Promise<string>((resolve, reject) => {
// code here should resolve(data) or reject(error)
...
})
return fileContent
}
因此,只需在内部添加fs.readFile并在回调中调用这些函数:
async function readAsyncFile(FILE3: string): Promise<string> {
const fileContent = new Promise<string>((resolve, reject) => {
// code here should resolve(data) or reject(error)
fs.readFile(FILE3, "utf8", (err, data) => {
console.log("INSIDE FILE3 readFile callback function...");
if (err) reject("Error reading FILE3");
else resolve(data);
});
})
return fileContent
}