【问题标题】:wait for request to finish and return data等待请求完成并返回数据
【发布时间】:2016-04-13 14:41:09
【问题描述】:

我正在使用 node js 构建一个 Restful API 这是我的代码

有 3 个主要部分,我创建了一个必须返回一些数据的 get 方法

get 调用对外部 API 有请求的 getImportIoData,此方法调用另一个名为 getEmailFromWebSite 的方法,此另一个方法调用另一个请求, 如何等待每个请求完成返回数据

我知道这已在其他问题中得到解答,但我尝试了其中一些但没有奏效

我尝试了 Async 和 q 库,这部分的回调也不起作用

if (item.website !== undefined){
              getEmailFromWebSite(item.website, function(email){console.log(email); item.email = email;});
            }

我不知道我是否做错了什么,

有人可以帮我解决这个问题吗?使用我的代码

提前致谢

router.get('/', function(req, res) {
  var Type = req.query.Type;
  var Locations = req.query.Locations;
  var Page = req.query.Page;
  res.send(getImportIoData(res, Type, Locations, Page));
});

function getImportIoData(res, Type, Locations, Page) {
  var criteria = {
    'search_terms': Type,
    'geo_location_terms': Locations,
    'page': Page
  }
  var url = consts.import_io + consts.import_key + consts.query +
    encodeURIComponent(consts.api_url) + encodeQueryData(criteria) +
    /*"&_user=" + consts.user + */"&_apikey=" + consts.api_key;

  request(url, function(error, response, json) {
    var data = JSON.parse(json);
    if (!error && response.statusCode === 200) {
      var doctors = _.forEach(data.results, function(item) {
        if (item.website !== undefined){
          getEmailFromWebSite(item.website, function(email){console.log(email); item.email = email;});
        }
      });
      return data.results
    }
    //else 
  });
}

function getEmailFromWebSite(website, callback) {

  var EmptyReturn='';
  searchTerm = extractDomain(website).replace('www.', '');
  if (searchTerm != ''){
    var EH_APIURL = 'https://api.emailhunter.co/v1/search?domain='+searchTerm+'&api_key='+ consts.EmailHunterAPIKey;

    request(EH_APIURL, function(error, response, json) {
      var data = JSON.parse(json);
      if (!error && response.statusCode === 200) {
        if((data.emails).length != 0){
          var Emailobject = data.emails;
          var EmailString = returnEmails(Emailobject);
          callback(EmailString);
        }else
          callback(EmptyReturn);
      }else if (response.statusCode === 429)
        console.log('The number of Request has been Reached for this account');
      else if (response.statusCode > 500)
        console.log('Error with Email Hunter Servers');
      else
        console.log('An Error Ocurred');
    });
  }
}

【问题讨论】:

    标签: javascript node.js asynchronous callback q


    【解决方案1】:

    那里没有与q 相关的代码,但q.all 接收一组承诺并在所有这些承诺都得到解决时解决,所以你可以做这样的事情..

    var promises = [ promiseOne(), promiseTwo(), promiseThree() ];
    q.all(promises).then(function(results) {
        //results is an array with the resolution values from all your promises in the order you specified in the promises array
    });
    

    【讨论】:

    • 有没有办法让你在这个例子中使用我的代码,因为我没有得到这个例子
    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多