How to know when a transaction has been committed?

Here’s my current (horrific) solution:

  waitForTransaction: (transaction) ->
      successEvents = ['didCreate', 'didUpdate', 'didDelete']
      failEvents    = ['becameError', 'becameInvalid']
      events = [successEvents, failEvents].flatten()

      dirtyRecords = transaction.get('records').toArray()

      promises = dirtyRecords.map (r) ->
        promise = Ember.Deferred.create()
        eventHandlersForRecord = events.map (e) ->      
          eventHandler = ->
            console.log "Got event #{e} on #{r}"

            eventHandlersForRecord.each (handler) ->
              r.off e, handler

            result =
              event: e
              record: r

            if e in successEvents
              promise.resolve result
            else
              promise.reject result
              
          r.on e, eventHandler 
        promise

      Ember.RSVP.all promises
1 Like