javascript - Angular promise 执行顺序控制

标签 javascript angularjs

我正在尝试以特定方式使用 angularjs 异步实现 JavaScript 函数,如下图所示。

enter image description here

我试了几个选项都没有运气 http://jsfiddle.net/pb53cafy/4/

示例代码:

function PromiseCtrl($scope, $q, $timeout) {
//
 var Afunction = function() {
        var deferred = $q.defer();
        $timeout(function() {
                deferred.resolve("Success A");
        }, 1000);
        return deferred.promise;
    };

   var Bfunction = function() {
        var deferred = $q.defer();
        $timeout(function() {
                deferred.resolve("Success B");
        }, 2000);
        return deferred.promise;
    };
    $scope.result = "Waiting";
    $q.all([
            Afunction(),
            Bfunction()
        ]).then(function(value) {
        $scope.result = value;       
    }, function(reason) {
        $scope.result = reason;
    });
    //Remaining code ...

}

感谢您对此的帮助

编辑:修改了我正在寻找的代码 http://jsfiddle.net/pb53cafy/11/

最佳答案

您可以创建另一个函数来控制执行过程:

function execute() {
    var deferred = $q.defer();
    var bFinished;

    var aPromise = Afunction().then(function(aRes) {
        if(!bFinished) deferred.resolve(aRes);
        return aRes;
    }).catch(deferred.reject);

    Bfunction().then(function(bRes) {
        bFinished = true;
        return aPromise.then(function(aRes) {
            deferred.resolve(bRes + " and " + aRes);
        });
    });

    return deferred.promise;
}

如果 A 先完成,它不会等待 B。

如果 B 先完成,它会等待 A 也完成。

关于javascript - Angular promise 执行顺序控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48263848/

相关文章:

javascript - 在浏览器上本地化日期?

javascript - 继续添加 n 维对象数组的最佳方法是什么?

javascript - Angular 日期选择器的行为完全不符合预期

javascript - 如何在我的案例中创建显示和隐藏元素?

angularjs - 指令 : how to evaluate ng-options in parent scope

javascript - 垂直数组值水平存储到mysql表的不同列中

javascript - 按邮政编码划分的等值线 map

javascript - 我有一个按钮,单击时会更改其中的文本,但不会改回

javascript - 函数运行函数

javascript - 使用 angularjs 变量初始化评级插件