Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未定义解析,使用非内联函数作为回调节点_Javascript_Node.js_Callback_Promise - Fatal编程技术网

Javascript 未定义解析,使用非内联函数作为回调节点

Javascript 未定义解析,使用非内联函数作为回调节点,javascript,node.js,callback,promise,Javascript,Node.js,Callback,Promise,我想创建一个所有REST函数都可以使用的通用回调函数,在本例中,它被称为defaultCallback,定义如下。问题是,当我点击它时,我得到了一个“未定义解析”错误。这种使用非内联定义函数作为回调的范例是否可行?如果是这样,我做错了什么?这是我的密码 function getUsingRest() { return new Promise(function (resolve, reject) { request({ url: url, header

我想创建一个所有REST函数都可以使用的通用回调函数,在本例中,它被称为defaultCallback,定义如下。问题是,当我点击它时,我得到了一个“未定义解析”错误。这种使用非内联定义函数作为回调的范例是否可行?如果是这样,我做错了什么?这是我的密码

function getUsingRest() {
    return new Promise(function (resolve, reject) { 
      request({
      url: url,
      headers: headers
    }, function(error, response) {
          defaultCallback(error, response);
      });
    });
  }

  function defaultCallback(error, response) {
    if(error) {
        reject(error);
      } else {
        resolve(JSON.parse(response.body));
      }
  }

不需要通过匿名函数包装
defaultCallback

尝试改变

 request(json, function(error, response) {
      defaultCallback(error, response);
  });


是的,您需要在
newpromise
构造函数中声明
defaultCallback
,以使
resolve
reject
变量在作用域中。只需删除“默认回调”并编写

function getUsingRest() {
  return new Promise(function (resolve, reject) { 
    request({
    url: url,
    headers: headers
  }, function(error, response) {
    if (error) {
      reject(error);
    } else {
      resolve(JSON.parse(response.body));
    }
  });
}
或者更好

function getUsingRest() {
  return new Promise(function(resolve, reject) { 
    request({
    url: url,
    headers: headers
  }, function(error, response) {
    if (error) {
      reject(error);
    } else {
      resolve(response);
    }
  }).then(response => JSON.parse(response.body));
}
因此,
JSON.parse
中的异常会被捕获并导致承诺被拒绝


如果您坚持将“默认”承诺回调设置为泛型,以便可以在多个函数之间共享它,请查看(如果您感兴趣,请查看其实现)。

它不在范围内。。。我猜你能做到我该怎么做?也将resolve和reject传递给默认回调?函数范围与promise不同,因此
resolve
reject
defaultCallback
中不存在。要么采用不同的方法(比如根本不调用函数,直接内联代码),要么传递解析并拒绝对defaultCallback的引用(作为函数参数),要么使用
.call
.apply
,但那会很糟糕。你可以,或者你也可以像我链接的patebin那样编写代码
function getUsingRest() {
  return new Promise(function(resolve, reject) { 
    request({
    url: url,
    headers: headers
  }, function(error, response) {
    if (error) {
      reject(error);
    } else {
      resolve(response);
    }
  }).then(response => JSON.parse(response.body));
}