有没有办法最终添加到现有的承诺?

时间:2017-10-23 00:07:06

标签: javascript angularjs localforage

我正在使用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;

还有另一种方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:2)

如果你想"转换"一个承诺到另一个,你可以使用他们的resolve方法来解决内部承诺(或采用承诺的价值)。对于$q,您可以使用resolve method here。所以基本上:

return $q.resolve(localforage.length());

即将推出Promise.prototype.finally,因此您可以抓取$q并使用shim使用原生Promise。你所要做的就是使用Promise代替$q(字面意思)。