【问题标题】:Return a new promise and wait in Ember Data if response is 202如果响应为 202,则返回一个新的 Promise 并在 Ember Data 中等待
【发布时间】:2014-10-23 18:47:23
【问题描述】:

我们的应用程序中有一个导入过程,由服务器在后台处理,但由用户在我们的 Ember 应用程序中启动。如果转换后导入过程尚未完成,我想发回 202 响应并让 Ember 在 500 毫秒内重试请求。

我想使用 Ember 的内部功能来处理这个问题(加载路线和常规模型设置器),所以我尝试覆盖 RESTAdapter.ajax 方法。我目前在尝试加载路线时遇到一般错误Error while processing route: import。我怎样才能实现这种行为?

App.ApplicationAdapter = DS.ActiveModelAdapter.extend
  ajax: (url, type, options) ->
    adapter = this
    new Ember.RSVP.Promise((resolve, reject) ->
      hash = adapter.ajaxOptions(url, type, options)
      hash.success = (json, textStatus, jqXHR) ->
        # begin modifications
        if jqXHR and jqXHR.status is 202
          return Ember.run.later adapter, (->
            this.ajax(url, type, options)
          ), 500
        else
          # end modifications
          return Ember.run null, resolve, json

      hash.error = (jqXHR, textStatus, errorThrown) ->
        Ember.run null, reject, adapter.ajaxError(jqXHR)

      Ember.$.ajax hash
    , "DS: RESTAdapter#ajax " + type + " to " + url)

【问题讨论】:

  • 假设这是 CS - 请将其标记为 coffeescript。

标签: ajax ember.js coffeescript ember-data promise


【解决方案1】:

通过在我的路由的beforeModel 方法中检查服务器上的端点,我能够获得所需的功能。如果服务器仍在处理后台作业,路由器将中止转换并转换到辅助路由,该路由向用户显示一条好消息并不断检查服务器上的端点,直到该过程完成。完成后,它会转换回原始路线。

App.ImportRoute = Ember.Route.extend
  beforeModel: (transition) ->
    router = @
    $.get('/import/loading', "json").done (data)->
      if data
        transition.abort()
        router.transitionTo('importGateway')
  model: (params) ->
    @store.find('myModel')

App.ImportGatewayController = Ember.ObjectController.extend
  init: ->
    @getStatus()
  getStatus: ->
    controller = @
    $.get('/import/loading', "json").done (data)->
      if data
        Ember.run.later controller, (-> @getStatus()), 500
      else
        controller.transitionToRoute('import')

【讨论】:

    猜你喜欢
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2019-05-28
    • 2018-05-20
    • 2019-04-16
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多