我很抱歉,如果其他承诺线程已经回答了这个问题,但在查看其中一些时,我只是没有得到解决问题的答案。我有三个json文件,我想抓取,解析和手动合并。问题是我陷入了承诺监狱。让我向您展示我的angularjs控制器中的一些代码。
$scope.tests = [];
$scope.tests = $http.get('results/testResults.json').then(function(res) {
return res;
});
console.dir($scope.tests);
从console.dir我得到了一个承诺,但我希望的是来自res变量的数据。必须有一些方法来获取数据。有没有办法从全局变量的承诺中获取数据,因此其他函数承诺可以使用这些数据?谢谢
答案 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;
这不是最好的方法!有谁知道更好的方法?