从承诺中获取数据而不是返回承诺

时间:2014-11-10 23:01:19

标签: javascript angularjs promise

我很抱歉,如果其他承诺线程已经回答了这个问题,但在查看其中一些时,我只是没有得到解决问题的答案。我有三个json文件,我想抓取,解析和手动合并。问题是我陷入了承诺监狱。让我向您展示我的angularjs控制器中的一些代码。

$scope.tests = [];

$scope.tests = $http.get('results/testResults.json').then(function(res) {
  return res;
});

console.dir($scope.tests);

从console.dir我得到了一个承诺,但我希望的是来自res变量的数据。必须有一些方法来获取数据。有没有办法从全局变量的承诺中获取数据,因此其他函数承诺可以使用这些数据?谢谢

2 个答案:

答案 0 :(得分:16)

承诺在未来的某个时间完成。在数据在promise中之前,您正在检查promise变量。您应该留在承诺链中以使用您的数据。在承诺链之外,您不知道异步事件的时间安排(这就是您首先使用承诺的原因)。

如果您真的不想在第一个.then()处理程序中使用数据,这是使用它的理想位置,那么您可以将另一个.then()链接到您的承诺上:< / p>

$scope.tests = $http.get('results/testResults.json');

$scope.tests.then(function(data) {
   // can use data here
});

仅供参考,承诺不会将数据填充到全局变量中。当调用这些回调时,它们使数据可用于.then()回调。

答案 1 :(得分:-2)

组成一个属性并将其粘贴在窗口对象上,如下所示,

window.myProperty

然后将数据从承诺内部传递给它,就像这样,

window.myProperty = data;

当你回到外面时,捡起来,就像这样,

myVariable = window.myProperty;

或者相反,因为我似乎无法将数据输入或输出某些Promise,所以就这样,

再次,组成一个属性并将其粘贴在窗口对象上,就像这样,

window.myProperty

然后将数据从承诺之外传递给它,就像这样,

window.myProperty = data;

当你在里面的时候捡起来,就像这样,

myVariable = window.myProperty;

这不是最好的方法!有谁知道更好的方法?