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

Javascript 从承诺中获取数据,而不是返回承诺,javascript,angularjs,promise,Javascript,Angularjs,Promise,如果其他promise线程已经回答了这个问题,我很抱歉,但是当查看其中一些线程时,我没有得到解决我的问题的答案。我有三个json文件需要抓取、解析和手动合并。问题是我被困在监狱里了。让我向您展示一些来自angularjs控制器的代码 $scope.tests = []; $scope.tests = $http.get('results/testResults.json').then(function(res) { return res; }); console.dir($scope.t

如果其他promise线程已经回答了这个问题,我很抱歉,但是当查看其中一些线程时,我没有得到解决我的问题的答案。我有三个json文件需要抓取、解析和手动合并。问题是我被困在监狱里了。让我向您展示一些来自angularjs控制器的代码

$scope.tests = [];

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

console.dir($scope.tests);

从console.dir我得到了一个承诺,但我希望得到的是res变量的数据。一定有办法把数据拿出来。是否没有办法从对全局变量的承诺中获取数据,以便其他函数的承诺可以使用此数据?谢谢

这个承诺在将来的某个时候就完成了。在promise中包含数据之前,您正在检查promise变量。你应该留在承诺链中使用你的数据。在承诺链之外,您不知道异步事件的时间(这就是为什么您首先使用承诺)

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

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

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

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

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

window.myProperty

然后把你的数据传给它,从承诺里面,像这样

window.myProperty=数据

当你回到外面的时候把它捡起来,就像这样

myVariable=window.myProperty

或者正好相反,因为我似乎无法从某些承诺中获取数据,所以会是这样的

同样,创建一个属性并将其粘贴到window对象上,如下所示

window.myProperty

然后把你的数据从承诺之外传给它,就像这样

window.myProperty=数据

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

myVariable=window.myProperty


这不是最好的方法!有人知道更好的方法吗

您不能从回调中获取数据,而是使用回调中的数据。然后()您的上一个承诺和控制台日志这是使用承诺的完全错误的方式。承诺是异步的,您正在尝试同步使用它,并且您还希望消除该标识映射。所以我无法构建一个大对象并从三个json文件收集数据并合并?在我看来,我是stuck@jrock2004-在使用异步操作时,您必须以稍微不同的方式思考和编写代码。您可以使用其他promise功能,例如
promise.all()
来协调多个异步操作,以便在完成所有异步结果后运行一些代码并使用所有结果。