如何 return 来自 Breeze 的 ECMASCRIPT 6 Promise
How to return ECMASCRIPT 6 Promise from Breeze
一个breeze查询returns接口breeze.Promises.IPromise.
它正在使用 kris kowal 的 Q promises.,它使用 Q.Deferred 到 return 的承诺。
Q 使用 Q.Promise 公开了一个符合 ES6 的 Promise。
如何从 breeze 查询中获取 ES6 Promise?我基本上希望有一种巧妙的方法将 Q.Deferred 转换为 Q.Promise。
function getES6Promise () {
var query = breeze.EntityQuery.from("Table");
// How to return as an ES6 Promise?
return em.executeQuery(query);
}
我相信您必须在 Promise
周围配置 breeze,使其看起来像 Q
。
Breeze 只需要 Q
界面的一小部分:defer
、resolve
和 reject
。 defer
有一个 promise
属性。 resolve
和 reject
return 承诺。承诺可以来自任何库,只要它具有合适的 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 操作 return 的承诺具有您选择的任何承诺库的形状和特征,当然不需要遵守 that 接口.
许多 API 和文档示例使用 fail
和 fin
。显然,这些不是 ES6 承诺的方法,也不会起作用。 fail
需要 catch
,fin(finFn)
需要 then(finFn, finFn)
。
幸运的是,breeze 内部仅调用 promise.then
,不使用这些其他 promise 方法。
找个时间试试我的包装建议,让我们知道结果如何。
一个breeze查询returns接口breeze.Promises.IPromise.
它正在使用 kris kowal 的 Q promises.,它使用 Q.Deferred 到 return 的承诺。
Q 使用 Q.Promise 公开了一个符合 ES6 的 Promise。
如何从 breeze 查询中获取 ES6 Promise?我基本上希望有一种巧妙的方法将 Q.Deferred 转换为 Q.Promise。
function getES6Promise () {
var query = breeze.EntityQuery.from("Table");
// How to return as an ES6 Promise?
return em.executeQuery(query);
}
我相信您必须在 Promise
周围配置 breeze,使其看起来像 Q
。
Breeze 只需要 Q
界面的一小部分:defer
、resolve
和 reject
。 defer
有一个 promise
属性。 resolve
和 reject
return 承诺。承诺可以来自任何库,只要它具有合适的 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 操作 return 的承诺具有您选择的任何承诺库的形状和特征,当然不需要遵守 that 接口.
许多 API 和文档示例使用 fail
和 fin
。显然,这些不是 ES6 承诺的方法,也不会起作用。 fail
需要 catch
,fin(finFn)
需要 then(finFn, finFn)
。
幸运的是,breeze 内部仅调用 promise.then
,不使用这些其他 promise 方法。
找个时间试试我的包装建议,让我们知道结果如何。