Backbone 使用回调与承诺获取 collection

Backbone fetching a collection using callbacks vs promises

我有一个位置 collection,我从服务器 r 返回一个 JSON 响应,包括根标题,格式为:

{'locations':[
  {
  "id": 1,
  "address": 'first address'
},{
  "id": 2,
  "address": 'second address'
}
]}

我到处都读到过使用 promise 的方法而不是 backbone 成功和错误回调的最佳实践,但事情就是这样。我已经将 Location collection 上的 parse 方法覆盖到 return 数组,但似乎使用 promises 方法根本没有调用 parse 方法。例如:

var Locations = new Backbone.Collection.extend({...})
var locations = new Locations()
locations.fetch().then(function(response){
console.log(response)
})

returns 一个具有 属性 个位置的 Object 文字,它具有位置数组的值。但是如果我使用

locations.fetch({ 
success: function(response){
console.log(response)
}
})

我得到了想要的行为,即 object 带有构造函数位置和其中的所有模型。

此外,如果我删除后端 JSON 响应的根标题并删除 collection 上的解析方法重写,我会得到一个 object 与构造函数数组,而通过成功回调,我得到一个 object 与构造函数 Locations.

所以我的问题是,如果使用 promise 的方法更好,如何采用与成功和错误回调类似的行为?

请求的更新:

这是 Locations collections

中的解析函数
var Locations = new Backbone.Collection.extend({
parse: function(response){
return response['locations']
}
})

直接使用集合:

locations.fetch().then(function(){
    console.log(locations);
})

fetch 方法 returns 发出请求的 jqXHR 承诺,因此它 returns 从服务器收到的原始响应。承诺不知道响应的解析。

success 回调作为选项传递给 fetch 对您有用的原因是:(参见 Collection.fetch 文档)

The options hash takes success and error callbacks which will both be passed (collection, response, options) as arguments.

因此,如果使用 success 回调传递给 fetch,第一个参数实际上是 collection,而不是 response