我有这段代码:
$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;
};
我有一个audio
数组,我在我的控制器中使用并传递给$scope.play
。但是,使用以下内容:
var playIndex = 0;
$scope.play(audios[playIndex]).then(function () {
playIndex++;
$scope.play(audios[playIndex]);
});
这适用于我在数组中的前两个音频,因为我没有检查第二个.play
的返回。如何成功完成所有音频阵列的循环?
提前致谢。
答案 0 :(得分:2)
您可以将传递给then
的函数命名,并以递归方式从其自身调用它:
var playIndex = 0;
$scope.play(audios[playIndex]).then(function next() {
if (++playIndex < audios.length) {
$scope.play(audios[playIndex]).then(next);
}
});
答案 1 :(得分:1)
您可以创建一个poll
函数,该函数将在最后一个音频承诺得到解决后递归调用自身。池功能将调用$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);