首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将嵌套的promises返回给另一个函数

将嵌套的promises返回给另一个函数
EN

Stack Overflow用户
提问于 2018-04-18 09:48:17
回答 1查看 47关注 0票数 1

我有一个NodeJS应用程序,我想我在从嵌套的Promise内部返回时遇到了问题。

如下所示,getToken函数正在工作。它调用另一个函数来检索密码。在此之后,它在进行GET调用时使用密码值。

然后,我们成功地获得了一个令牌,并将body打印到控制台。这是可行的。

但是,我现在面临的挑战是将我的令牌body的值传递给另一个方法以供以后使用。printBodyValue当前失败,失败时出现“undefined”错误。

如何将值从getToken内部传递到printBodyValue

代码语言:javascript
代码运行次数:0
运行
复制
getToken: function() {
   module.exports.readCredentialPassword()
 .then(result => {
     var request = require('request-promise');
     var passwd = result;
     var basicAuthData = "Basic " + (new Buffer("fooUser" + ":" + passwd).toString("base64"));
     var options = {
        method: "GET",
        uri: ("http://localhost:8001/service/verify"),
        followRedirects: true,
        headers: {
          "Authorization": basicAuthData
        }
     };
     return request(options)
       .then(function (body) {
         console.log("Token value is: ", body);
         return body;
       })
       .catch(function (err) {
         console.log("Oops! ", err);
       });
   });
}

printBodyValue: function() {
   module.exports.getToken().then(function(body) {
    console.log("Token value from printBodyValue is: \n", body);
   });
}
EN

回答 1

Stack Overflow用户

发布于 2018-04-18 09:52:16

getToken中,不使用嵌套的promise反模式,而是链接您的promise,并返回最终的promise,这样您就可以使用promise并使用它的解析值:

(另外,由于您使用的是ES6,因此优先使用const而不是var)

代码语言:javascript
代码运行次数:0
运行
复制
getToken: function() {
  return module.exports.readCredentialPassword()
    .then(result => {
      const request = require('request-promise');
      const passwd = result;
      const basicAuthData = "Basic " + (new Buffer("fooUser" + ":" + passwd).toString("base64"));
      module.exports.log("Sending Request: ", jenkinsCrumbURL);
      const options = {
        method: "GET",
        uri: ("http://localhost:8001/service/verify"),
        followRedirects: true,
        headers: {
          "Authorization": basicAuthData
        }
      };
      return request(options);
    })
    .then(function(body) {
      console.log("Token value is: ", body);
      // the return value below
      // will be the final result of the resolution of
      // `module.exports.readCredentialPassword`, barring errors:
      return body;
    })
    .catch(function(err) {
      console.log("Oops! ", err);
    });
}

printBodyValue: function() {
  module.exports.getToken().then(function(body) {
    console.log("Token value from printBodyValue is: \n", body);
  });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49889916

复制
相关文章

相似问题

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