【发布时间】: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,这就是我所缺少的。
-
data是undefined,当您使用catch处理错误时 - 您不会从那里返回任何内容
标签: javascript node.js promise