Q Promise库的.finally()和.done()之间有什么区别?

使用Nodejs Q promise库的.finally()和.done()语句有什么区别。

例如,这两者之间的区别是什么?

Q(...) .then(...) .finally(); //or fin() Q(..) .then() .done(); 

promise.done(onSuccess, onError)只是允许你处理parsing值。 另外一个好处是不会导致吞咽错误(就像promise.then() ),它保证了任何涉及到的exception都会被暴露。 它也有效地结束了链条,不会再有任何进一步的承诺。

promise.finally(fn)用于注册在给定的许诺解决之后必须完成的任务(无论promise是成功还是失败都无关紧要)。 通常情况下,你使用它进行某种清理操作,例如想象你设置了一个进度条,在请求完成之后需要隐藏进度条(不pipe是否成功),然后执行promise.finally(hideProgressBar) 。 另外promise.finally()返回inputpromise,所以你可以返回它进行进一步的处理。

区别在于链接和error handling以及错误日志logging:

 Q(...) .then(...) .finally(); 

在这里,如果then抛出, finally仍然会运行,但不会logging错误。 在Q中,无论成功与否.then finally都会运行。 这就像JS try/catch/finallyfinally关键字一样。 在这种情况下,也可以将其他链接链接到链中。

 Q(..) .then() .done(); 

这里, done表示promise链已经结束,不能再链接到它。 如果只传递一个onFulfilled处理程序,它将不会运行,如果then抛出,它会logging错误,如果它以exception结束。