特别是我想宣传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调用非promisifyed版本的sync和ajax调用,这些调用不会在此承诺中返回resolve。如果我写了一些愚蠢的东西,我很抱歉很抱歉。
在promisifying骨干上我发现谷歌的信息很少,只有几个包在npm,但我不想包含额外的包,特别是如果它们不受欢迎。
答案 0 :(得分:1)
正如@BenjaminGruenbaum在评论中所说的那样
fetch
已经在骨干中返回了一个承诺,无需宣传它。
promisify
仅适用于具有节点功能约定的函数
然而fetch返回jqXHR并且我想要Bluebird的承诺,所以我需要使用Bluebird.resolve()就是这样。
所以我最终得到了这个
Promise.resolve(diagram.fetch())
.then(function (res) {
console.log('success');
})
.catch(() => {
console.error('fetch failed');
});