角度js相当于q库中的done函数

时间:2014-11-08 03:58:45

标签: angularjs promise angular-promise

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

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

2 个答案:

答案 0 :(得分:8)

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

Q中.done的作用是终止一个承诺链,以便抛出未处理的拒绝。由于$ 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或其他承诺库不同),因为意外链终止的可能性很小,因此不需要执行.doneQ().then(function(){ return JSON.parse("invalidJson"); }); 为了说明,

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

是Q中的吞没错误,但在$ q中,

{{1}}

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

答案 1 :(得分:-1)

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