angular js等价于q库中的done函数



我使用过node.js q库,最后有一个.done()函数,无论成功与否,它都会在最后被调用。

我研究了一下,但找不到,有人能指出正确的方向吗?

您可以使用.catch(function(e){ throw e; })来终止链。

.done在Q中所做的是终止承诺链,从而抛出未处理的拒绝。由于$q使用$exceptionHandler来处理抛出的拒绝(相对于返回的拒绝),所以使用.catch(function(e){ throw e; })也可以达到同样的目的。

.finally与Q中的.finally相当,后者的作用与$Q中的作用完全相同。

在Q中,做:

Q().then(handle).done(handleSuccess, handleFail);

与大致相同

Q().then(handle).then(handleSuccess, handleFail).done();

这与非常相似

$q.when().then(handle).then(handleSuccess, handleFail).catch(function(e){ throw e; });

然而,由于$q在抛出异常的情况下委托给$exceptionHandler(与q或其他promise库不同),所以不太需要执行.done,因为意外链终止的可能性要小得多。举例来说,

Q().then(function(){ return JSON.parse("invalidJson"); });

在Q中是一个被吞噬的错误,但在$Q中,

$q.when().then(function(){ return JSON.parse("invalidJson"); });

这将导致控制台中出现大量红色大警告(默认情况下)。

您想要的是angular中promise的finally函数。您可以在angular中参考以下关于$q promise库的angular文档。https://docs.angularjs.org/api/ng/service/$q

最新更新