Да, вам нужно объявить 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
перехватывались и приводили к отклонению обещания.
Если вы настаиваете на том, чтобы сделать этот обратный вызов обещания «по умолчанию» универсальным, чтобы вы могли разделить его между несколькими функциями, взгляните на util.promisify
(и его реализацию, если вам интересно).