如何获得promise.response以返回API的响应?

时间:2019-06-12 16:55:55

标签: javascript express promise

TLDR:我的promise.response必须在API调用和promise中都被调用。

我试图通过Promise为简单的Express.js服务器从API调用中获取返回值。

这似乎是很多问题的话题,但是我还没有成功地使实现适合这种情况。我也尝试过:

  • 将API调用放置在resolve()中
  • 异步/等待实施(愿意重新访问)

这是有关代码的基本结构。可能是问题所在的部分上方有一条评论。

承诺

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函数在其上面的函数返回之前就已触发。

来自Shell的日志

> undefined
> "success"

1 个答案:

答案 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);