AngularJS:如何以预定义的顺序执行函数?

时间:2015-03-17 17:32:26

标签: javascript angularjs asynchronous

我的AngularJS控制器中有以下接收器:

   // Receive broadcast
        $rootScope.$on('setPlayListEvent', function(event, playListData) {
          if($scope.someSoundsArePlaying === true) {
             $scope.stopAllSelectedSounds();
          }
            $scope.setPlaylistToView(playListData);
        });

但似乎,在代码之前总是调用并执行名为setPlaylistToView的方法:

 if($scope.someSoundsArePlaying === true) {
                 $scope.stopAllSelectedSounds();
              }

因此它会影响方法的结果。

我想问一下,我怎样才能设置"执行顺序"功能?像解决方案......然后......

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

Javascript是单线程的,因此您不想保留该线程,因此可能的方法来处理您的问题是使用承诺。

我会用以下方式编写代码:

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

  //Perform logic

  //if logic performed successfuly
  deferred.resolve();

  //if logic failed
  deferred.reject('reason is blah');

  return deferred.promise;
}

$scope.stopAllSelectedSounds().then(function() {
  alert('Success');
  $scope.setPlaylistToView(playListData);
}, function(reason) {
  alert('Failed ' + reason);
});

这种方式只有在成功执行stopAllSelectedSounds时,您才会执行setPlaylistToView而不会暂停整个应用程序。

请参阅 - Angular's Q documentation

  

一种帮助您异步运行函数并使用它们的服务   完成处理后返回值(或例外)。