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);
}
答案 0 :(得分:0)
我相信您必须使用围绕Promise
的包装器配置breeze,使其看起来像Q
。
Breeze只需要Q
界面的一小部分:defer
,resolve
和reject
。 defer
具有promise
属性。 resolve
和reject
返回承诺。承诺可以来自任何库,只要它采用合适的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和文档示例都使用fail
和fin
。显然,这些不是ES6承诺的方法,也不会起作用。您希望catch
fail
和then(finFn, finFn)
fin(finFn)
。
幸运的是,内部微风专门调用promise.then
并且不使用这些其他承诺方法。
请稍后尝试我的包装器建议,让我们知道它是如何工作的。