Bluebird PromisifyAll on Backbone无法解决

时间:2017-05-13 16:56:55

标签: javascript node.js backbone.js promise bluebird

特别是我想宣传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,但我不想包含额外的包,特别是如果它们不受欢迎。

1 个答案:

答案 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');
                });