【问题标题】:Ember: Promise (destroyRecord().then()) failing on successful requestEmber:Promise (destroyRecord().then()) 在成功请求时失败
【发布时间】:2015-02-07 21:38:46
【问题描述】:

我对 ember 很陌生,但我已经花了几个小时来解决这个问题,但我无法自己解决。这是我的路线(使用 ember-cli):

import Ember from 'ember';

export default Ember.Route.extend({
    actions: {
        save: function() {
            var controller = this.controller;
            controller.get('model').save().then(function(account) {
                console.log('account saved');
                controller.transitionToRoute('accounts.index');
            }, function(response) {
                console.log('account NOT saved');
            });

            return false;
        },
        deleteAccount: function() {
            var controller = this.controller;
            controller.get('model').destroyRecord().then(function(account) {
                console.log('account deleted');
                controller.transitionToRoute('accounts.index');
            }, function(response) {
                console.log('account NOT deleted');
            });

            return false;
        },
        cancel: function() {
            this.controller.get('model').rollback();
            this.transitionToRoute('accounts.index');
            return false;
        },
    }
});

我正在我的模板(按钮)中触发 deleteAccount 操作。有趣的是,代码实际上是在删除记录。它发送一个成功的删除请求,API 删除该帐户。但它永远不会转换为accounts.index。相反,它会记录“未删除帐户”。如果我手动转到 account.index,则该模型不再存在(正如人们所期望的那样)。 我从官方 ember 文档中获得了代码。见:http://emberjs.com/api/data/classes/DS.Model.html#method_destroyRecord

那么为什么当模型被实际删除时,promise 总是失败呢?非常感谢您的帮助!

顺便说一句:这是一个将 account_id 作为参数传递的编辑路由,因此无需在路由上手动定义“模型函数”。以防万一有人想知道。

【问题讨论】:

  • 嘿,DELETE 请求的响应是什么?也许是一个成功的200,但是ember不理解响应?
  • 这是一个空的 HTTP 200 OK。就我而言,这应该是对删除请求的有效响应。

标签: ember.js ember-data


【解决方案1】:

我想我刚刚解决了它。 destroyRecord() 承诺失败的原因似乎是我的 API 响应了 EMPTY HTTP 200 响应。但是 200 通常意味着返回了一个实体,但事实并非如此。所以我调整了 API 以返回一个空的 204 响应,这就成功了。这个 SO 答案实际上有很大帮助:HTTP status code for update and delete?

如果响应包含一个成功的响应应该是 200 (OK) 描述状态的实体,如果操作尚未完成,则为 202(已接受) 已制定,或 204(无内容),如果该行动已制定,但 响应不包含实体。

【讨论】:

  • 完美答案。我只从这篇文章中找到了答案!非常感谢您提供更好的解释。
  • 例如head :no_content 使用 Rails
猜你喜欢
  • 2020-08-28
  • 2016-12-24
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
相关资源
最近更新 更多