我正在使用localforage,它返回key()和length()等函数的promise。我也使用$ http()返回一个promise,但是它包含了一个finally()函数,而另一个则没有。
我在链中的服务不知道localforage或$ http是否发出请求所以它们都需要相同的promise结构(最后然后)。有没有办法最终添加到尚未拥有它的承诺中?
我试图将$ q.defer()。promise.finally附加到我的localforage的承诺中,但这些承诺不起作用。
var promise = localforage.length();
promise.finally = $q.defer().promise.finally;
return promise;
还有另一种方法可以达到这个目的吗?
答案 0 :(得分:2)
如果你想"转换"一个承诺到另一个,你可以使用他们的resolve
方法来解决内部承诺(或采用承诺的价值)。对于$q
,您可以使用resolve method here。所以基本上:
return $q.resolve(localforage.length());
即将推出Promise.prototype.finally
,因此您可以抓取$q
并使用shim使用原生Promise
。你所要做的就是使用Promise
代替$q
(字面意思)。