用Angularjs返回两个承诺,How To Chain So UI有$scope

Returning Two Promises With Angularjs, How To Chain So UI Has $scope

本文关键字:Chain To How So UI scope 承诺 返回 Angularjs 两个      更新时间:2024-03-24

我的UI崩溃了,因为我的第二个承诺在第一个承诺中有一个依赖项,解决得不够快。因此,我接受了第二个承诺,并将其嵌套在第一个承诺中,如下所示:

 csRepo.getSet(setID).then(
        function (val) {
            $scope.dataSet= val;
            csRepo.getInfoInSet(setID).then(
                function (val) {
                 $scope.dataSet.InfoOfSet = val;
                 $scope.$apply();
                 })
                .catch(function (reason) {
               throw "getInfoSet:" + reason;
                 });
            $scope.$apply();
        })
        .catch(function (reason) {
            throw "getSet() :" + reason;
        });

这确实起到了作用,但我相信最好的做法是将两者"然后"联系在一起。这是真的吗?如果是的话,有人能重构我的代码样本来展示这一点吗?谢谢

在您的示例中,您可以独立调用这两个方法,因为setID可以从函数调用的闭包中获得,但如果您只想在csRepo.getSet之后调用csRepo.getInfoInSet,您可以这样做:

 csRepo.getSet(setID).then(
    function (val) {
        $scope.dataSet= val;
        return setID;
    })
    .then(csRepo.getInfoInSet)
    .then(function (val) {
       $scope.dataSet.InfoOfSet = val;
    })
    .catch(function (reason) {
       throw reason;
    })

您不需要每次都调用$scope.$apply,因为它也会影响性能。您可以使用$q.all并行调用这两个方法并组合promise。请参阅:https://docs.angularjs.org/api/ng/service/$q