如何从Breeze返回ECMASCRIPT 6承诺

如何从Breeze返回ECMASCRIPT 6承诺,breeze,q,es6-promise,Breeze,Q,Es6 Promise,breeze查询返回接口 它使用的是kris kowal的,它使用了一个Q.延迟来返回一个承诺 Q通过Q.Promise公开了符合ES6的承诺 如何从breeze查询中获得ES6承诺?我基本上是希望有一个巧妙的方式来转换一个Q。推迟到一个Q承诺 function getES6Promise () { var query = breeze.EntityQuery.from("Table"); // How to return as an ES6 Promise? retur

breeze查询返回接口

它使用的是kris kowal的,它使用了一个Q.延迟来返回一个承诺

Q通过Q.Promise公开了符合ES6的承诺

如何从breeze查询中获得ES6承诺?我基本上是希望有一个巧妙的方式来转换一个Q。推迟到一个Q承诺

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

我相信您必须在
Promise
周围配置一个包装器,使其看起来像
Q

Breeze只需要
Q
界面的一小部分:
延迟
解决
拒绝
<代码>延迟具有
承诺
属性<代码>解决和
拒绝
退货承诺。只要采用合适的
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操作返回的承诺具有您选择的任何承诺库的形状和特征,当然不需要遵守该接口

许多API和文档示例使用
fail
fin
。显然,这些都不是ES6承诺的方法,也不会起作用。对于
fail
您需要捕获
catch
,对于
fin(finFn,finFn)
则需要捕获
fin(finFn)

幸运的是,breeze在内部以独占方式调用了
promise。然后
并没有使用这些其他promise方法

找个时间试试我的建议,让我们知道效果如何