Javascript 主干foreach等待

Javascript 主干foreach等待,javascript,backbone.js,Javascript,Backbone.js,我有一个轨道模型和一组轨道。模型本身有一个函数play(),用于播放单曲。当单曲(按列表顺序)完成时,收藏应能够一首接一首地播放每一首曲目 型号: app.Track = Backbone.Model.extend({ defaults: {...}, initialize: {...}, play: function(playlist) { if(finished && playlist) { Backbone.pub

我有一个轨道模型和一组轨道。模型本身有一个函数play(),用于播放单曲。当单曲(按列表顺序)完成时,收藏应能够一首接一首地播放每一首曲目

型号:

app.Track = Backbone.Model.extend({
    defaults: {...},
    initialize: {...},
    play: function(playlist) {
       if(finished && playlist) {
           Backbone.pubSub.trigger('finishedPlaybackLoadNext')
       } else {
           Backbone.pubSub.trigger('finishedPlayback')  
       }
    },
})
var TrackList = Backbone.Collection.extend({
    model: app.Track,
    nextOrder: function() {...},
    comparator: function( track ) {...},
    playAll: function() {
       this.models.forEach(function(item) {
          item.play(true); //true = play as playlist
       });
    }
})
收藏:

app.Track = Backbone.Model.extend({
    defaults: {...},
    initialize: {...},
    play: function(playlist) {
       if(finished && playlist) {
           Backbone.pubSub.trigger('finishedPlaybackLoadNext')
       } else {
           Backbone.pubSub.trigger('finishedPlayback')  
       }
    },
})
var TrackList = Backbone.Collection.extend({
    model: app.Track,
    nextOrder: function() {...},
    comparator: function( track ) {...},
    playAll: function() {
       this.models.forEach(function(item) {
          item.play(true); //true = play as playlist
       });
    }
})
正如预期的那样,forEach不会等到列表中的每个单独模型的播放完成。我怎样才能实现这种等待

编辑:我正在使用事件的全局触发器/订阅服务器在不同视图中共享它们

Backbone.pubSub = _.extend({}, Backbone.Events);

我认为你应该有两个模型来连续播放歌曲。首先,您有一个曲目模型和它对应的曲目列表集合,但接下来您会有另一个称为PlayList的模型和一个集合

然后,曲目的播放函数应采用另一个参数,该参数将是在曲目播放结束时必须执行的回调。通过这种方式,您也可以在播放列表上使用播放功能,该功能将通过嵌套回调(听起来像递归乐趣:P)来播放一行中的所有歌曲

编辑:我继续攻击了我所想的一些小实现。我这里不使用主干,但我相信您可以调整这个想法,如果您有一些将回调函数传递给歌曲播放函数的方法(顺便问一下,您实际上是如何播放歌曲的?)

我也对这件事很感兴趣