请求与节点回调

时间:2016-09-05 11:18:12

标签: node.js

我试图创建一个回调函数,但不断被告知data is not a function。我已经根据另一个问题进行了设置,但似乎没有用?

getRequest("http://", function(error, data){
  console.log(data);
});

function getRequest(url, error, data) {
  request({
      method: 'GET',
      uri: url,
      headers: {
        'Content-Type': 'application/json',
        'dataType': 'json'}
    }, function (error, response, body){
      if(!error && response.statusCode == 200){

        data(JSON.parse(body));

      } else {
        error(error);
      }
    })
}

1 个答案:

答案 0 :(得分:1)

如果你想同时进行这两项工作,成功和失败都会导致一次回调,你应该用data(或代码中的cb)来代替调用error

getRequest("http://", function(error, data){
  if(error) throw error
  console.log(data)
});

function getRequest(url, cb, data) {
  request({
      method: 'GET',
      uri: url,
      headers: {
        'Content-Type': 'application/json',
        'dataType': 'json'}
    }, function (error, response, body){
      if(cb) {
          cb(error, JSON.parse(body))
      }
    })
}

否则,您应该检查是否提供了两个回调

function getRequest(url, success, error) {
  request({
      method: 'GET',
      uri: url,
      headers: {
        'Content-Type': 'application/json',
        'dataType': 'json'}
    }, function (error, response, body){
      if(error && failure) {
         failure(error)
      } else if(success) {
         success(JSON.parse(body))
      }
    })
}

在这种情况下,您应该提供两个回调函数,第一个用于成功结果,第二个用于错误,这是不常见的模式。