我使用过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