我遇到了与Node的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();
它从文件中返回undefined而不是JSON。为什么不等待文件读取完成?
答案 0 :(得分:3)
你没有从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));
});
});
}
Await要求实际的承诺等待。这样做是返回使用等待的承诺。因此,我们等到我们调用resolve
- 当我们加载JSON时会发生这种情况:
let json = await readJSONFile();
console.log(json);
我们在此致电readJSONFile
。这将返回一个在JSON文件加载完成时解析的promise,并允许看似同步执行异步代码。
答案 1 :(得分:1)
你错过了承诺解决并拒绝。
使用如下。
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);
});
}
});
答案 2 :(得分:-1)
试一试:
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);
});
}