0

我正在使用 localforage,它返回对 key() 和 length() 等函数的承诺。我也在使用 $http() ,它也返回一个承诺,但它包含一个 finally() 函数,而另一个函数没有。

我的下游服务不知道是 localforage 还是 $http 发出请求,因此它们都需要相同的承诺结构(最终和然后)。有没有办法最终添加到尚未拥有的承诺中?

我试图将 $q.defer().promise.finally 附加到我来自 localforage 的承诺中,但没有成功。

var promise = localforage.length();
promise.finally = $q.defer().promise.finally;
return promise;

还有另一种方法可以实现这一目标吗?

4

1 回答 1

2

如果你想将一个promise“转换”成另一个promise,你可以使用他们的resolve方法来解决一个内部promise(或采用promise的值)。因为$q你可以在这里使用 resolve 方法。所以基本上:

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

Promise.prototype.finally即将推出,因此您可以通过shim$q从头开始​​使用本机。您所要做的就是从字面上使用而不是(字面意思)。PromisePromise$q

于 2017-10-23T00:17:52.660 回答