TLDR:我的promise.response必须在API调用和promise中都被调用。
我试图通过Promise为简单的Express.js服务器从API调用中获取返回值。
这似乎是很多问题的话题,但是我还没有成功地使实现适合这种情况。我也尝试过:
这是有关代码的基本结构。可能是问题所在的部分上方有一条评论。
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调用内部(“成功”),另一个来自其返回值。因为undefined出现在“成功”之前,所以我们知道resolve函数在其上面的函数返回之前就已触发。
> undefined
> "success"
答案 0 :(得分:2)
您没有提供使用api调用响应的方法。将该承诺转换为承诺,然后使用它。
module.exports = {
apiCall: function(parameters) {
return new Promise((res, rej) => {
apiCall(
parameters,
function(err, response) {
if (err) {
rej(err);
} else {
res(response);
}
}
)
});
}
};
然后像这样使用它
let promise = externalModule.apiCall(parameters);