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