蓝鸟承诺所有在骨干上没有解决



>特别是我想承诺 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');
                });

最新更新