首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让promise.response返回API的响应?

如何让promise.response返回API的响应?
EN

Stack Overflow用户
提问于 2019-06-12 16:55:55
回答 1查看 149关注 0票数 0

TLDR:我的promise.response需要在API调用和承诺中调用。

我试图通过一个简单的Express.js服务器的承诺从API调用中获得一个返回值。

这似乎是一个许多问题的主题,但我还没有成功地使实现适应这种情况。我也试过:

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

下面是所讨论的代码的基本结构。上面有一段评论,可能是问题所在。

承诺

代码语言:javascript
复制
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);
});

外部模块

代码语言:javascript
复制
module.exports = {
    apiCall: function(parameters) {
        apiCall(
            parameters,
            function(err, response) {
                if (err) {
                    console.error(err);
                    return;
                } else {
                    console.log("success");
                    return response
                }
            }
        )
    }
};

如果代码正常工作,我们会看到两个字符串。一个来自API调用(“成功”),另一个来自它的返回值。因为未定义的函数出现在“成功”之前,所以我们知道,在上面的函数返回之前,已触发了解析函数。

来自Shell的日志

代码语言:javascript
复制
> undefined
> "success"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 17:07:59

您没有提供使用api调用的响应的方法。把它转化成一个承诺,然后使用它。

代码语言:javascript
复制
module.exports = {
  apiCall: function(parameters) {
    return new Promise((res, rej) => {
      apiCall(
        parameters,
        function(err, response) {
          if (err) {
            rej(err);
          } else {
            res(response);
          }
        }
      )
    });
  }
};

然后像这样使用它

代码语言:javascript
复制
let promise = externalModule.apiCall(parameters);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56567065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档