我正在尝试在nodejs应用中实现以下伪代码-
async task1(){
await asyncFunc();
return true;
}
let task1IsDone = await task1();
if(task1IsDone){
task2();
}
但是从我阅读过的有关异步/等待的所有文档来看,使用异步等待的正常方法似乎是-
let data;
data = await task1();
task2(data);
是否有一种以我在伪代码中尝试的方式使用异步等待的方法? 有什么理由不尝试这样做(返回简单的布尔值)吗?
真实代码-
getList: async function(type,startDate){
request(BASE_URL+'data.json?tz=America/Vancouver&ftime=DeviceEntryDate&stime='+startDate+'&fids='+type, async (error, response, body) => {
console.log('error:', error);
console.log('statusCode:', response && response.statusCode);
await fs.writeFile('downloads/'+type+'.json',body, (err) =>{
if(err) {
console.log(err);
}
console.log('5');
});
console.log('7');
return true;
});
}
或
getList: async function(type,startDate){
await request(BASE_URL+'data.json?tz=America/Vancouver&ftime=DeviceEntryDate&stime='+startDate+'&fids='+type, (error, response, body) => {
console.log('error:', error);
console.log('statusCode:', response && response.statusCode);
fs.writeFile('downloads/'+type+'.json',body, (err) =>{
if(err) {
console.log(err);
}
console.log('5');
});
console.log('7');
});
return true;
}
答案 0 :(得分:1)
如果您的请求返回了一个承诺,它将是这样:
getList: async function(type,startDate){
try {
const response = await request(BASE_URL+'data.json?tz=America/Vancouver&ftime=DeviceEntryDate&stime='+startDate+'&fids='+type);
console.log('statusCode:', response.statusCode);
await fsPromises.writeFile('downloads/'+type+'.json',body);
console.log('5');
return true
} catch (error) {
console.log('error:', error);
return false; //false if error?
}
}
还请注意,fs不会返回承诺,因此您需要使用实验性的fsPromises