【问题标题】:Returning a promise inside of another promise在另一个承诺中返回一个承诺
【发布时间】:2017-10-27 18:35:47
【问题描述】:

我正在尝试返回一个依赖于另一个承诺数据的承诺。我想我对如何在另一个承诺完成后立即开始一个承诺感到困惑。

我最终得到了

LDBManager.getRankByName 上的错误:无法读取未定义的属性 'then'

index.js

try {                   // DATA IS UNDEFINED HERE ↓
  LDBManager.getRankByName(name).then(function (data) {
    console.log(data);
  });
} catch (e) {
  console.log('Error on LDBManager.getRankByName: ' + e.message);
}

ldb-manager.js

var LDBManager = {

    getSummonerByName: function (name) {

        return new Promise((resolve, reject) => {
            var url = LDB.url1;

            https.get(url, function (res) {
                var json = '';
                res.on('data', function (chunk) {
                    json += chunk;
                });
                res.on('end', function () {
                    var data = JSON.parse(json);
                    resolve(data);
                });
            }).on('error', function (e) {
                reject(e.stack);
            });
        })
            .catch(function () {
                console.log(`Couldn't retrieve summoner: ${name}`);
            });
    },

    getRankByName: function (name) {

        return this.getSummonerByName(name).then(function (summoner) {
            new Promise((resolve, reject) => {
                var url = LDB.url2;
                https.get(url, function (res) {
                    var json = '';
                    res.on('data', function (chunk) {
                        json += chunk;
                    });
                    res.on('end', function () {
                        var data = JSON.parse(json);
                        resolve(data); // ← DATA HAS WHAT I WANT HERE
                    });
                }).on('error', function (e) {
                    reject(e.stack);
                });
            })
                .catch(function () {
                    console.log(`Couldn't retrieve ranked stats for ${name}`);
                });
        });
    }
}

module.exports = LDBManager;

编辑:编辑返回,我可以在解析(数据)中看到我想要的值,但在控制台日志中看不到。

感谢您的帮助!

【问题讨论】:

  • getRankByName 不返回任何内容。
  • 您的编辑,您仍然缺少返回.. new Promise( -> return new Promise(
  • 谢谢@Keith,这就是我所缺少的。
  • dataundefined,当您使用 catch 处理错误时 - 您不会从那里返回任何内容

标签: javascript node.js promise


【解决方案1】:

您需要将 getSummonerByName 包装到一个承诺中。

return new Promise((resolve,reject)=>{
    this.getSummonerByName(name).then(summoner => {
       // put your http request code here. then resolve data that you want to resolve from the promise resolve callback and reject if error occur.
    })
});

【讨论】:

  • 不,你不需要。
猜你喜欢
  • 1970-01-01
  • 2015-11-27
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2016-09-18
  • 2016-07-20
相关资源
最近更新 更多