在 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 返回的承诺传递给调用者。