TLDR: мой обещание. Ответ должен был быть вызван как в вызове API, так и в обещании.
Я пытаюсь получить возвращаемое значение из вызова API через Promise для простого сервера Express.js.
Кажется, это тема многих вопросов, но мне еще предстоит успешно адаптировать реализацию к этому случаю. Я также попробовал:
- размещение вызова API в пределах resol ()
- Асинхронные / ожидающие реализации (желающие вернуться)
Вот базовая структура рассматриваемого кода. Над разделом, где, вероятно, проблема, есть комментарий.
Promise
const externalModule = require('<route to module>');
let promise = new Promise(function(resolve,reject) {
// This is probably where the problem is
let returnValue = externalModule.apiCall(parameters);
resolve(returnValue);
});
promise.then(function(returnValue) {
console.log(returnValue);
});
Внешний модуль
module.exports = {
apiCall: function(parameters) {
apiCall(
parameters,
function(err, response) {
if (err) {
console.error(err);
return;
} else {
console.log("success");
return response
}
}
)
}
};
Если бы код работал правильно, мы бы увидели две строки. Один изнутри вызова API («success»), а другой из его возвращаемого значения. Поскольку значение undefined появляется перед «успехом», мы знаем, что функция разрешения была запущена до того, как вернулась функция над ней.
Логи из скорлупы
> undefined
> "success"