如何从Breeze返回ECMASCRIPT 6 Promise

时间:2015-09-29 15:01:35

标签: breeze q es6-promise

breeze查询返回接口breeze.Promises.IPromise

它正在使用kris kowal的Q promises.,它使用Q.Deferred返回一个承诺。

Q使用Q.Promise公开符合ES6标准的Promise。

如何从微风查询中获得ES6承诺?我基本上希望有一种灵巧的方式来转换Q.Deferred到Q.Promise。

function getES6Promise () {
    var query = breeze.EntityQuery.from("Table");
    // How to return as an ES6 Promise?
    return em.executeQuery(query);
}

1 个答案:

答案 0 :(得分:0)

我相信您必须使用围绕Promise的包装器配置breeze,使其看起来像Q

Breeze只需要Q界面的一小部分:deferresolverejectdefer具有promise属性。 resolvereject返回承诺。承诺可以来自任何库,只要它采用合适的then方法。

这是一个我从头顶煮熟但尚未尝试的包装纸:

(function () {
  function defer() {
    var deferred = {}
    deferred.promise = new Promise((resolve, reject) => {
      deferred.resolve = resolve;
      deferred.reject = reject;
    })
    return deferred;
  }
  var Q = {
    all: Promise.all,
    defer: defer,
    resolve: Promise.resolve,
    reject: Promise.reject
  }
  breeze.config.setQ(Q)
})()

FWIW,你的推荐无用的breeze.Promises.IPromise接口,应该从文档中删除。

事实上,Breeze操作返回的承诺具有您选择的任何promise库的形状和特征,当然不需要遵守那个界面。

许多API和文档示例都使用failfin。显然,这些不是ES6承诺的方法,也不会起作用。您希望catch failthen(finFn, finFn) fin(finFn)

幸运的是,内部微风专门调用promise.then并且不使用这些其他承诺方法。

请稍后尝试我的包装器建议,让我们知道它是如何工作的。