节点JS回调没有等待就执行了

时间:2018-03-28 00:09:40

标签: node.js callback

我有以下执行GET调用的功能。我想等待响应,然后执行下一步。我的代码看起来像这样

getListOfChannels : function(token, callback){
  var Channels = [];
  var options = { method: 'GET',
  url: url,
  headers: 
  { 
    'x-api-key': token } };

  request(options, function (error, response, body) {
  if (error) throw new Error(error);

  var json = JSON.parse(body)
  var data = json.MemberEntitlement;
  for(var i=0 ; i < data.length ; i++){
    if(data[i].Entitled == false){
        Channels.push(data[i].ChannelNumber);

    }
  }
});
  callback(Channels[0]);
}

我的回调函数也只是打印值

simplePrint : function(arg){
  console.log(arg)
}

但是,回调函数不会等待完整响应并打印出undefined。 我该怎么办。我可以添加隐式等待,但这似乎不是一个好习惯。

1 个答案:

答案 0 :(得分:1)

我认为您在请求函数调用后调用回调。它不在请求的范围内,而是在 getListOfChannels 范围内。因此,回调正在同步运行。尝试更换:

}); callback(Channels[0]); }

callback(Channels[0]); }); }