角度承诺和两种方法

时间:2017-04-29 16:29:28

标签: javascript angularjs

我有两种不同的方法,一种用于触发某些东西,另一种用于响应的监听器。我希望能够以这种方式调用该触发方法,以便在我收到第二个侦听器回调方法中的所有数据之前不会调用它。我怎么能这样做?

我试过这样:

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...
            });

2 个答案:

答案 0 :(得分:1)

而不是$q.all只是将您的承诺链接到then

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

您可能需要更改功能,以便他们可以从先前的承诺中获取已解析的值并将其传递给下一个承诺。这一切都取决于您希望在最终回调中使用哪些数据。

答案 1 :(得分:0)

如果我理解正确你有依赖的电话,并希望第二个电话等到第一个电话完成..你会这样写:

doCommand('A')
  .then(doCommand('B'))
  .then(doCommand('C'))
  .then( function(dataFromC){ console.log('all done')  } )

您上面所做的是并行获取,其中所有数据将同时到达。希望有所帮助