【问题标题】:How can i handle http requests failures with ember.js?如何使用 ember.js 处理 http 请求失败?
【发布时间】:2013-05-08 12:51:29
【问题描述】:

我见过this question

直到没有对 ember-data 故障进行任何处理,我可以写什么来修补它,这样如果我的请求没有 200OK 响应,我可以收到一条消息?

我在看 ember-data 源码,比如这里是createRecord函数

createRecord: function(store, type, record) {
    var root = this.rootForType(type);
    var adapter = this;
    var data = {};

    data[root] = this.serialize(record, { includeId: true });

    return this.ajax(this.buildURL(root), "POST", {
      data: data
    }).then(function(json){
      Ember.run(adapter, 'didCreateRecord', store, type, record, json);
    }, function(xhr) {
      adapter.didError(store, type, record, xhr);
      throw xhr;
    });
  }

我期待的是这样的:

success: //do something
error: //do something else

但没有这样的事。 ajax请求后只是then

我该怎么办?完全重写所有我需要的方法?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    截至this commit ember 数据现在使用承诺(特别是rsvp implementation),它用.then() 样式替换success:error: 回调:

    promise.then(function(value) {
      // success
    }, function(value) {
      // failure
    });
    

    这和之前的回调风格很相似,但是遵循了promises的风格。

    第一个函数在成功时调用,第二个函数在失败时调用。查看您发布的代码显示 didError() 在 ajax 失败时被调用,这是在适配器中实现的。

    didError() (source) 如果状态为 422 则调用 store.recordWasInvalid(),否则调用 store.recordWasError() (source)。

    store.recordWasInvalid()store.recordWasError() 将记录转换为isErrorisValid = false 状态并触发记录上的becameError()becameInvalid() 事件。您可以检查这些状态或订阅这些事件以显示您的错误消息。

    【讨论】:

    • 作为提醒,我们将很快改变 Promise 与 Ember Data 的集成方式。它们仍然会存在,但机制会有所改变。发生这种情况时,我们将确保提供详尽的解释。
    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2018-10-22
    • 2014-08-28
    • 2016-05-24
    • 1970-01-01
    • 2022-10-18
    相关资源
    最近更新 更多