IE9: обещание store.find не разрешено

У меня есть что-то вроде следующего кода (coffeescript):

Ember.Application.initializer
  name: 'currentPerson'
  initialize: (container, application) ->
    application.deferReadiness()
    store.find('person', 'current')
    .then (person) ->
      #Never executed
      application.advanceReadiness()
    .fail >
      #Never executed
      application.advanceReadiness()

Это работает во всех других браузерах, но не в IE9.

Самое смешное, что если я отлаживаю это и ставлю точку останова сразу после того, как findById создает обещание (findById вызывается store.find), это работает. Так что это похоже на какую-то гонку данных. Кто-нибудь испытал это?


person Robin Heggelund Hansen    schedule 08.01.2014    source источник


Ответы (1)


Меня удивляет, что это работает во всех других браузерах, потому что я думаю, вам придется использовать толстую стрелку (=>) для доступа к application, и, кроме того, вы никогда не вызываете advanceReadiness (требуется ()).

Если в каком-либо из методов then/fail возникает ошибка, он автоматически завершится ошибкой. Чтобы отловить эти ошибки, см. https://github.com/tildeio/rsvp.js#error-handling.

person Thomas Brus    schedule 08.01.2014
comment
Извините, код был написан из головы, а я много пишу на Ruby, поэтому код может быть не совсем правильным, я это немедленно исправлю. Я знаю, что функции then и fail не вызываются, потому что я установил в них точки останова, поэтому исключения не могут возникнуть. - person Robin Heggelund Hansen; 09.01.2014
comment
И нет, вам не нужна толстая стрелка, если только вы не планируете использовать this без ссылки на текущую функцию. - person Robin Heggelund Hansen; 09.01.2014