我有两种不同的方法,一种用于触发某些内容,另一种是用于响应的侦听器。我希望能够以这种方式调用该触发方法,以便在我在第二个侦听器回调方法中接收到所有数据之前不调用下一个触发方法。我怎样才能做到这一点?

我这样尝试过:

var doCommand = function(command) {
    var d = $q.defer();
    //I want to call this one only when previous command is finished,
    //and that's done in method bellow...
    myApp.callTriggeringMethod(command);

    myApp.myEventListener(function(){
        //on successful callback
        alert('One command done');
        d.resolve(result); //I want here to enable next command execution
    }, function(){
       //on error
})
    return d.promise;
}

$q.all([
        doCommand("A")
        ,doCommand("B")
        ,doCommand("C")
        ]).then(function(data) {
                alert('ALL DONE');
               //TODO: something...
            });

最佳答案

不用$q.all而是将您的承诺与then链接在一起:

doCommand("A")
    .then(_ => doCommand("B"))
    .then(_ => doCommand("C"))
    .then(function(data) {
            alert('ALL DONE');
           //TODO: something...
    });


您可能需要更改功能,以便他们可以从上一个承诺中获取已解决的值并将其传递给下一个。这完全取决于您希望在最终回调中拥有哪些数据。

10-05 20:48