等待异步函数结果未定义
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);
});
}
我在使用 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);
});
}