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

jro*_*004 13 javascript promise angularjs

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

$scope.tests = [];

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

console.dir($scope.tests);
Run Code Online (Sandbox Code Playgroud)

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

jfr*_*d00 16

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

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

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

$scope.tests.then(function(data) {
   // can use data here
});
Run Code Online (Sandbox Code Playgroud)

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