我的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();
}
因此它会影响方法的结果。
我想问一下,我怎样才能设置"执行顺序"功能?像解决方案......然后......
感谢您的任何建议。
答案 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
一种帮助您异步运行函数并使用它们的服务 完成处理后返回值(或例外)。