Backbone 上的 Bluebird PromisifyAll 未解析
Bluebird PromisifyAll on Backbone not resolving
特别是我想承诺 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 调用不 return 在这个 promise 中解析。我是新手,如果我写了一些愚蠢的东西,我很抱歉。
关于承诺 backbone 我在 google 中发现的信息很少,只有 npm 上的几个包,但我不想包含额外的包,特别是如果它们不受欢迎。
正如@BenjaminGruenbaum 在评论中所说
fetch
returns backbone 中的承诺,无需再承诺。
promisify
仅适用于具有节点函数约定的函数
但是获取 returns jqXHR 并且我想要 Bluebird promise,所以我需要使用 Bluebird.resolve() 就是这样。
所以我得到了这个
Promise.resolve(diagram.fetch())
.then(function (res) {
console.log('success');
})
.catch(() => {
console.error('fetch failed');
});
特别是我想承诺 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 调用不 return 在这个 promise 中解析。我是新手,如果我写了一些愚蠢的东西,我很抱歉。
关于承诺 backbone 我在 google 中发现的信息很少,只有 npm 上的几个包,但我不想包含额外的包,特别是如果它们不受欢迎。
正如@BenjaminGruenbaum 在评论中所说
fetch
returns backbone 中的承诺,无需再承诺。
promisify
仅适用于具有节点函数约定的函数
但是获取 returns jqXHR 并且我想要 Bluebird promise,所以我需要使用 Bluebird.resolve() 就是这样。
所以我得到了这个
Promise.resolve(diagram.fetch())
.then(function (res) {
console.log('success');
})
.catch(() => {
console.error('fetch failed');
});