通过承诺链传递结果无法访问?

时间:2017-01-15 09:13:50

标签: javascript

根据我的下面的代码,我将所有数据链接到我希望将数据渲染到视图的结尾,但是使用.catch我发现在最终函数中无法访问召唤器。

getSummonerData(req.params.playerName)
.then(function(summoner) {
  return getMatchIds(summoner[0].id);
})
.then(function(matchIds) {
  return getGameData(matchIds);
})
.then(function(gameData) {
  res.render('profile', {player:summoner, games:gameData});
})
.catch(function(e) {
  console.log(e);
});

2 个答案:

答案 0 :(得分:1)

在您的代码中,只有包含您对/about的呼叫的summoner回调才能访问then,而不是其他地方。要在以后可以访问,您必须1)从getMatchIds回调中返回游戏数据,或者2)将需要它的then回调嵌入里面< / em>那个回调。

后者可能更容易:

then

答案 1 :(得分:0)

我不确定你的意思是什么&#34;承诺功能&#34;。我猜你不知道&#39;然后&#39;并且&#39;赶上&#39;总是回报承诺。这就是你可以链接它们的原因。每个&#39;然后&#39;或者&#39;赶上&#39;是其前身返回的承诺的方法。这些受束缚的承诺后来被解决或拒绝,这取决于他们的前任发生了什么。

我假设你的最后一个功能&#39; res.render(...)&#39;返回您想要查看的值。然后承诺&#39;然后(渲染(...))&#39;将通过来自&#39; res.render(...)&#39;的价值得到解决。

这就是&#39;赶上&#39;将使用:您希望看到的价值已解决的承诺。但是&#39;赶上&#39;只有在被拒绝的情况下才会激活其功能。诺言。你需要一个&#39;然后&#39;代替。