在 node.js 中,为什么我的数据在使用 Promise 读取异步文件后没有传回
In node.js, why is my data not getting passed back after a asynchronous file read using a Promise
我确定我的 pullData 模块正在从读取的文件中取回数据,但是调用它的函数虽然有等待,但没有获取数据。
这是读取数据的模块(./initialise.js):
const fs = require('fs');
const getData = () => {
return new Promise((resolve, reject) => {
fs.readFile('./Sybernika.txt',
{ encoding: 'utf8', flag: 'r' },
function (err, data) {
if (err)
reject(err);
else
resolve(data);
});
});
};
module.exports = {getData};
这就是它被调用的地方 (app.js):
const init = require('./initialise');
const pullData = async () => {
init.getData().then((data) => {
return data;
}).catch((err) => {
console.log(err);
});
};
const start = async() => {
let data = await pullData();
console.log(data);
}
start();
在调用的解析部分 return(data) 之前放置 'console.log(data)' 显示数据,因此我知道它正在被正常读取。但是,最后的 console.log 显示我的数据变量未定义。
有什么建议吗?
两者都可以
const pullData = async () => {
return init.getData().then((data) => {
return data;
}).catch((err) => {
console.log(err);
});
};
或
const pullData = async () =>
init.getData().then((data) => {
return data;
}).catch((err) => {
console.log(err);
});
两个版本都确保将 then
/catch
返回的承诺传递给调用者。
我确定我的 pullData 模块正在从读取的文件中取回数据,但是调用它的函数虽然有等待,但没有获取数据。
这是读取数据的模块(./initialise.js):
const fs = require('fs');
const getData = () => {
return new Promise((resolve, reject) => {
fs.readFile('./Sybernika.txt',
{ encoding: 'utf8', flag: 'r' },
function (err, data) {
if (err)
reject(err);
else
resolve(data);
});
});
};
module.exports = {getData};
这就是它被调用的地方 (app.js):
const init = require('./initialise');
const pullData = async () => {
init.getData().then((data) => {
return data;
}).catch((err) => {
console.log(err);
});
};
const start = async() => {
let data = await pullData();
console.log(data);
}
start();
在调用的解析部分 return(data) 之前放置 'console.log(data)' 显示数据,因此我知道它正在被正常读取。但是,最后的 console.log 显示我的数据变量未定义。
有什么建议吗?
两者都可以
const pullData = async () => {
return init.getData().then((data) => {
return data;
}).catch((err) => {
console.log(err);
});
};
或
const pullData = async () =>
init.getData().then((data) => {
return data;
}).catch((err) => {
console.log(err);
});
两个版本都确保将 then
/catch
返回的承诺传递给调用者。