等待异步函数结果未定义

Await for asynchronous function results in undefined

我在使用 Node.js async/await 时遇到了问题。当我尝试这个时:

function Read_Json_File() {
   fs.readFile('import.json','utf-8',(err, data) => {  
       if (err) throw err;
       json_data = JSON.parse(data);

       return json_data;

   });
}

async function run_demo() {
    let get_json_file = await Read_Json_File();
    console.log(get_json_file);
}

run_demo();

它 returns 未定义,而不是文件中的 JSON。为什么不等待文件读取完成?

你错过了 promise resolve and reject。

使用如下。

function Read_Json_File() {
    return new Promise((resolve,reject)=> {
           fs.readFile('import.json','utf-8',(err, data) => {  
               if (err) reject(err);
               json_data = JSON.parse(data);

               resolve(json_data);

           });
    }
});

您没有从 Read_Json_File 中 returning 任何内容,因此您得到了未定义的信息——您从回调中 returning 了没有任何结果的数据。相反,要使用 async/await,您需要承诺 fs.readFile,因为它还没有。然后你就可以使用 async/await:

function readJSONFile() {
  return new Promise((resolve, reject) => {
    fs.readFile('import.json', 'utf-8', (err, data) => { 
      if (err) reject(err);
      resolve(JSON.parse(data));
    });
  });
}

Await 需要一个实际的 promise 来等待。它所做的是 return 一个使用 await 的承诺。因此,我们等到我们调用 resolve - 当我们完成加载 JSON:

时发生
let json = await readJSONFile();
console.log(json);

这里我们调用readJSONFile。 return 是一个承诺,它在 JSON 文件加载完成后解析,并允许看似同步执行异步代码。

试一试:

      function Read_Json_File() {
          return new Promise(resolve,reject => {
            fs.readFile('import.json','utf-8',(err, data) => {  
              if (err) reject(err);
                json_data = JSON.parse(data);

              resolve(json_data);
           });

   }