我想创建一个通用的回调函数,我所有的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));
}
}
答案 0 :(得分:0)
是的,您需要在defaultCallback
构造函数中声明new Promise
,以使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
中的异常并导致承诺被拒绝。
如果您坚持要使“默认” promise回调具有通用性,以便可以在多个函数之间共享它,请查看util.promisify
(及其相关实现,以备您感兴趣)。
答案 1 :(得分:-1)
不需要用匿名函数包装defaultCallback
尝试改变
request(json, function(error, response) {
defaultCallback(error, response);
});
到
request(json, defaultCallback);