繁体   English   中英

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

[英]How to get promise.response to return an API’s response?

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

外壳日志

> undefined
> "success"

您没有提供使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM