Javascript 为什么这个arrow函数返回一个承诺{<;pending>;}

Javascript 为什么这个arrow函数返回一个承诺{<;pending>;},javascript,node.js,json,promise,path,Javascript,Node.js,Json,Promise,Path,我正在将一个JSON文件读入node.js代码,但是在retrieveTeamData函数中,我在控制台输出中得到了一个承诺{}。最初,我没有在retrieveTeamData函数中使用async/await,但我认为如果问题是承诺在解决之前超时,它会有所帮助 const PLAYERS_PATH = path.join(__dirname, 'json_files', 'absences.json'); const COACHES_PATH = path.join(__dirname,

我正在将一个JSON文件读入node.js代码,但是在retrieveTeamData函数中,我在控制台输出中得到了一个承诺{}。最初,我没有在retrieveTeamData函数中使用async/await,但我认为如果问题是承诺在解决之前超时,它会有所帮助

    const PLAYERS_PATH = path.join(__dirname, 'json_files', 'absences.json');
const COACHES_PATH = path.join(__dirname, 'json_files', 'members.json');

const readJsonFile = (path) => new Promise((resolve) => fs.readFile(path, 'utf8', (_, data) => resolve(data)))
    .then((data) => JSON.parse(data))
    .then((data) => data.stats);


   async function retrieveTeamData() {
      const players = async () => await readJsonFile(PLAYERS_PATH);
      const coaches  = async() => await readJsonFile(COACHES_PATH);
    console.log(players());
    console.log(coaches());
}

async
函数的结果总是Promise,所以您可以
等待它。

因为它返回一个Promise。promise的
then
方法返回一个promise,该promise将根据调用它的promise发生了什么以及在提供它的回调中发生了什么来解析。类似地,
async
函数总是返回一个承诺,该承诺被解析为函数中发生的事情。因此
players()
(例如)返回一个承诺

不能同步使用异步调用的结果。您必须异步使用它


请注意,以下内容没有任何作用:

const players = async () => await readJsonFile(PLAYERS_PATH);

players();
只用

readJsonFile(PLAYERS_PATH);
直接的。例如(在
async
函数中):


由于这在
async
函数中,因此可以使用
wait
等待该值。请注意,无论在最外层调用
async
函数的是什么,它都必须处理这样一个事实,即它以异步方式工作,并且可能会失败(因此必须
。然后
。catch
)。

您没有等待console.log语句的输出,因此它们是在承诺得到解决之前触发的。尝试将console.log语句附加到。然后将链连接到调用异步函数的语句

就是,
players().then(console.log(players())


不管这是否是最好的方法,您都会这样做。

这是因为您正在为reach
readJsonFile
创建新的异步方法,而不是等待它们在登录之前解决。我想你可能想要的是:

const players = await readJsonFile(PLAYERS_PATH);
const coaches = await readJsonFile(COACHES_PATH);

如果要保留原始语法,则需要在记录它们之前使用
await

console.log(await players())
阅读其他帖子,异步函数总是返回一个承诺。@Angela
players()instanceof promise
const players = await readJsonFile(PLAYERS_PATH);
const coaches = await readJsonFile(COACHES_PATH);