我使用了node.js q库,最后有.done()
函数,无论成功与否,都会被调用。
我研究但找不到,有人能指出正确的方向吗?
答案 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或其他承诺库不同),因为意外链终止的可能性很小,因此不需要执行.done
。Q().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