如何在节点中顺序执行http get

时间:2017-01-04 21:13:58

标签: node.js rest http

function getStuff(serial){
    return new Promise(function (fulfill, reject){
      request("url using serial", function (error, response, body){
        try {
          fulfill(body);
        } catch (error) {
          reject(error);
        }
      }, reject);
    });
}

while(FLAG) {
  var p = getStuff(x);
  p.then(function(obj){
    console.log(obj)
    if(some condition on obj) FLAG = false
  })
  //WAIT HERE TILL ITS DONE!!!!
}

如何使用此承诺使用循环顺序执行一系列使用不同序列的调用?

2 个答案:

答案 0 :(得分:2)

使用节点,您需要为异步调用构建代码。

kkreft的评论描述了一些可用于帮助解决此问题的工具。

您的代码的实现可能是:

var x = 1
var list = []
function trial(callback) {

  http.get("endpoint url", function (err, response) {
        x++;
        list.append(response.data);

        if (err) 
           callback(err);
        else
           callback(null, x);
    });
}

trial(function(err, r) {
     console.log(r);
     console.log(list);
});

答案 1 :(得分:1)

简短的回答是你不是。你想要对从这样的调用回来的数据做的任何事都必须在回调中。所以:

var x = 1
function trial() {
  http.get("endpoint url", function (response) {
    x++;
    list.push(response.data);
    console.log(x) // 2
  });

  return x;
}
console.log(trial())// 1

您调度的电话是异步的。目前,规范中没有任何内容可以让我们等待通话结果。无论需要多长时间,所有同步代码(函数外部的所有内容)都将在调用结果返回之前执行。因此,您必须处理回调内的数据或管理异步的其他内容,如promises。