node.js - 在另一个函数中等待一个承诺
问题描述
我正在尝试在 nodejs 应用程序中实现以下伪代码-
async task1(){
await asyncFunc();
return true;
}
let task1IsDone = await task1();
if(task1IsDone){
task2();
}
但是从我读过的关于 async/await 的所有文档来看,使用 async await 的正常方式似乎是——
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;
}
解决方案
如果您的请求返回一个承诺,这将是它的样子:
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
推荐阅读
- python - 如何将动态值解析为 kv 文件中的属性?
- c - 我在 C 编程的双向链表中遇到问题。(下一个指针错误)
- docker - 在 docker 镜像中添加 .jar 文件
- sql - 自动生成到现有表 DB2 的时间戳列(主键)
- arrays - 我正在尝试返回数组中的两个最大数字,但出现分段错误
- primefaces - 在 Y 轴 ChartJS Primefaces 设置固定间隔
- java - 从硒拍摄的base64图像创建视频
- macos - 如何在终端(Mac)中运行 .lua 文件
- jenkins - 为什么我无法配置 ssh 密钥以从 Jenkins 读取 Gerrit 存储库?
- github - 无法打开gh页面