Javascript 承诺上的AngularJS递归函数
我有以下代码:Javascript 承诺上的AngularJS递归函数,javascript,angularjs,Javascript,Angularjs,我有以下代码: $scope.play = function (audio) { var deferred = $q.defer(); api.play(audio).then(function () { deferred.resolve(); }, function (err) { deferred.reject(); console.log(err); }); return deferr
$scope.play = function (audio) {
var deferred = $q.defer();
api.play(audio).then(function () {
deferred.resolve();
}, function (err) {
deferred.reject();
console.log(err);
});
return deferred.promise;
};
我在控制器中使用了一组音频
,并将其传递给$scope.play
。但是,使用以下方法:
var playIndex = 0;
$scope.play(audios[playIndex]).then(function () {
playIndex++;
$scope.play(audios[playIndex]);
});
当然,这适用于阵列中的前两个音频,因为我没有检查第二个.play
的返回。我如何才能成功地在所有Audio阵列中实现此循环
提前感谢。您可以创建一个
poll
函数,当最后一个音频承诺得到解决时,该函数将递归调用自身。Pool函数将调用$scope.play
,它将在成功时增加playIndex
,然后再次调用poll函数,它将查找下一个要播放的音频。您需要确保在调用poll(playIndex)
之前添加一些条件,以便无限次地调用它
代码
(function poll(playIndex) {
$scope.play(audios[playIndex]).then(function() {
playIndex++;
poll(playIndex);//here it should be call on some condition
});
})(playIndex);
您可以命名传递到
中的函数,然后
并从自身递归调用它:
var playIndex = 0;
$scope.play(audios[playIndex]).then(function next() {
if (++playIndex < audios.length) {
$scope.play(audios[playIndex]).then(next);
}
});
var playIndex=0;
$scope.play(audios[playIndex])。然后(函数next(){
if(++播放索引<音频长度){
$scope.play(audios[playIndex]),然后(next);
}
});
演示:谢谢,您能详细说明一下吗?因为我不知道如何准确地使用它。-请注意,.play函数采用的不仅仅是您描述的索引。
audios[index]
。将现有承诺包装在新的延期中是一种反模式。您的函数应该是$scope.play=function(audio){return api.play(audio);}
。就这样,真的。