Javascript AngularJS:有没有更好的方法来同步两个承诺?

Javascript AngularJS:有没有更好的方法来同步两个承诺?,javascript,angularjs,Javascript,Angularjs,是的,您可以使用以下命令并行运行它们: 或者: $q.all([$http.get('/services/menu'), $http.get('/services/language')]) .then(function (res) { var dataMenu = res[0].data.result.items; console.log('dataLanguage', res[1].data); $scope.menuRoot = data

是的,您可以使用以下命令并行运行它们:

或者:

$q.all([$http.get('/services/menu'), $http.get('/services/language')])
   .then(function (res) {
        var dataMenu = res[0].data.result.items;
        console.log('dataLanguage', res[1].data);
        $scope.menuRoot = dataMenu;
        $scope.menuItems = dataMenu;
        $scope.languageRoot = res[1].data.result;
        $scope.currentMenuItem = null;
        $scope.refreshExperiments();
        $scope.mergeLanguage();
});

这会同时发出两个
$http
请求,然后在两个
$http
承诺都实现后运行代码块(
console.log…etc
)。

您可能需要查看一下,并将。请注意,res包含另一个“数据”对象,因此我在中对其进行了编辑。您确定它可以工作吗?如果languagePromise在languagePromise之前完成,该怎么办?“…无论承诺在何时或将被解决或拒绝,
然后
在结果可用时异步调用成功或错误回调之一”-然后上的angular docs。。。我认为
success
只是
的糖分,然后
因此,如果首先解决了languagePromise,那么在解决menuPromise之前仍然不会调用它
$q.all([$http.get('/services/menu'), $http.get('/services/language')])
   .then(function (res) {
        var dataMenu = res[0].data.result.items;
        console.log('dataLanguage', res[1].data);
        $scope.menuRoot = dataMenu;
        $scope.menuItems = dataMenu;
        $scope.languageRoot = res[1].data.result;
        $scope.currentMenuItem = null;
        $scope.refreshExperiments();
        $scope.mergeLanguage();
});
var menuPromise = $http.get('/services/menu');
var languagePromise = $http.get('/services/language');

menuPromise.success(function(dataMenu) {
    languagePromise.success(function(dataLanguage) {
        console.log('dataLanguage', dataLanguage);
        $scope.menuRoot = dataMenu.result.items;
        $scope.menuItems = dataMenu.result.items;
        $scope.languageRoot = dataLanguage.result;
        $scope.currentMenuItem = null;
        $scope.refreshExperiments();
        $scope.mergeLanguage();
    });
});