>特别是我想承诺 model.fetch 方法,所以当我创建模型时,我承诺 Backbone
function (_, Backbone, Promise) {
Backbone = Promise.promisifyAll(Backbone);
var Diagram = Backbone.Model.extend({...});
}
但后来我尝试在我的图表模型上使用 fetchAsync,但没有任何反应。
diagram.fetchAsync()
.then(function() {
console.log('success');
},
function() {
console.log('err');
})
.catch(function() {
console.error('fetch failed');
});
在控制台中,此承诺如下所示
_bitField: 0
_fulfillmentHandler0: undefined
_promise0: undefined
_receiver0: undefined
_rejectionHandler0: undefined
__proto__: Object
我认为 fetchAsync 调用了同步和 ajax 调用的非承诺版本,这些版本在此承诺中不返回解析。我是承诺的新手,如果我写了一些愚蠢的东西,很抱歉。
在有前途的骨干上,我在谷歌中发现的信息很少,在 npm 上只有几个包,但我不想包含额外的包,特别是如果它们不受欢迎。
正如@BenjaminGruenbaum在评论中所说
fetch
已经在骨干中返回了一个承诺,没有必要承诺它。
promisify
仅适用于具有节点函数约定的函数
但是 fetch 返回 jqXHR,我想要 Bluebird 承诺,所以我需要使用 Bluebird.resolve((,仅此而已。
所以我最终得到了这个
Promise.resolve(diagram.fetch())
.then(function (res) {
console.log('success');
})
.catch(() => {
console.error('fetch failed');
});