首页 > 解决方案 > 在另一个函数中等待一个承诺

问题描述

我正在尝试在 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; 
  }

标签: node.jsasync-await

解决方案


如果您的请求返回一个承诺,这将是它的样子:

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


推荐阅读