【发布时间】:2015-10-18 04:52:34
【问题描述】:
在react-native tutorial 中写道:
请注意,我们在 Promise 链的末尾调用 done() - 总是 make 一定要调用 done() 否则抛出的任何错误都会被吞没。
fetchData: function() {
fetch(REQUEST_URL)
.then((response) => response.json())
.then((responseData) => {
this.setState({
movies: responseData.movies,
});
})
.done();
},
这个空的 .done() 实际上有什么作用?
【问题讨论】:
-
"Unhandled exceptions in a
thenfunction are silently captured as part of the state of the promise, but unhandled exceptions in adonefunction are thrown."如果你不做done,那么发生的任何错误都会存储在promise中,然后你把promise扔掉,你永远不会知道错误。 -
我想这是了解正在发生的事情的开始,但是完成没有争论是什么意思?
done实际上做了什么? -
The documentation 解释了不传递值时会发生什么。 (基本上,什么都没有发生。)关键是如果没有人处理它,
done会引发异常,而then将异常保存在 promise 中,以便它可以将其传播到下一个then调用中。问题是如果没有下一个then,那么异常永远不会传播到任何地方;它就消失了。结果是空的done表示“立即引发任何未决异常”。 -
@RaymondChen 你应该把你的 cmets 变成答案
-
@EugeneSafronov 我原本希望轻推就足够了。不打算把它变成答案。