Node.js异步/等待不起作用

时间:2018-08-07 00:08:58

标签: javascript node.js promise async-await

我是韩国人,英语说得不好,所以请您谅解。

我正在创建使用搜索字词和页码并对其进行爬网的代码。

let promises = []; //promise save
let totalData = []; //final data

let makeRequest = function(url) { 
  return new Promise((resolve, reject) => {
    request(url, function(err, response, body){
      if(body == null) { return reject('fail'); }

      const $ = cheerio.load(body);
      let parsingData = $('.g .r a');
      console.log(parsingData);

      for(let i = 0; i < parsingData.length; i++){
          totalData.push(parsingData[i]);
      }

      return resolve('success');
    });
  });
}

//promises push
for(let i = 0; i < pageCount; i++){
  let url = `https://google.com/search?q=${ searchWord }&start=${i}0`
  promises.push(makeRequest(url));
}


(async function(){
  try{
    await Promise.all(promises);   
    console.log(totalData); 
    return res.json(true);
  }
  catch(error){
    console.log(error);
    return res.json(false);
  }
});

我已经确认所有承诺都将从待定更改为已解决。

enter image description here

enter image description here

我还注意到我导入到爬网中的数据是正常的。

enter image description here

但是我不知道为什么异步和等待不起作用。 console.log(totalData);无法执行。

1 个答案:

答案 0 :(得分:1)

此部分:

initial_article = InitialArticle.objects.filter(...).first()
initial_article.article_set.all()  # return all articles which have foreign key to this article

看起来好像您正在尝试创建IIFE,但是在这种情况下,您已经创建了一个匿名函数,但是没有调用它。因此,该函数内的任何代码都不会执行。您需要在其末尾添加额外的括号集以调用该函数:

(async function(){
  try{
    await Promise.all(promises);   
    console.log(totalData); 
    return res.json(true);
  }
  catch(error){
    console.log(error);
    return res.json(false);
  }
});