在其他功能中等待承诺

时间:2018-11-24 02:15:26

标签: node.js async-await

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

1 个答案:

答案 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