编程语言
首页 > 编程语言> > javascript-等待异步函数导致未定义

javascript-等待异步函数导致未定义

作者:互联网

我在使用Node进行异步/等待时遇到了麻烦.当我尝试这个:

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();

它返回undefined而不是文件中的JSON.为什么不等待文件读取完成?

解决方法:

您没有从Read_Json_File返回任何内容,因此未定义-您从回调返回的数据不会产生任何结果.相反,要使用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));
    });
  });
}

等待需要实际的等待承诺.这样做是返回一个使用等待的承诺.因此,我们一直等到调用resolve时-在完成加载JSON时会发生这种情况:

let json = await readJSONFile();
console.log(json);

在这里,我们称为readJSONFile.这将返回一个承诺,该承诺将在JSON文件完成加载时解析,并允许看似同步执行异步代码.

标签:ecmascript-2017,node-js,async-await,es6-promise,javascript
来源: https://codeday.me/bug/20191110/2014322.html