【问题标题】:Why do we have to call `.done()` at the end of a promise chain in react-native?为什么我们必须在 react-native 的 Promise 链末尾调用 .done() ?
【发布时间】: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 then function are silently captured as part of the state of the promise, but unhandled exceptions in a done function are thrown."如果你不做done,那么发生的任何错误都会存储在promise中,然后你把promise扔掉,你永远不会知道错误。
  • 我想这是了解正在发生的事情的开始,但是完成没有争论是什么意思? done 实际上做了什么
  • The documentation 解释了不传递值时会发生什么。 (基本上,什么都没有发生。)关键是如果没有人处理它,done 会引发异常,而 then 将异常保存在 promise 中,以便它可以将其传播到下一个 then 调用中。问题是如果没有下一个then,那么异常永远不会传播到任何地方;它就消失了。结果是空的done 表示“立即引发任何未决异常”。
  • @RaymondChen 你应该把你的 cmets 变成答案
  • @EugeneSafronov 我原本希望轻推就足够了。不打算把它变成答案。

标签: javascript react-native


【解决方案1】:

我需要澄清什么:

  • promise 中遇到的异常(在执行then() 回调期间)存储为Error 对象,并且不会抛出

这种机制意味着您可以推迟操作,而不会在其中随机出现异常情况。

  • done() 在没有参数的情况下调用 promise 会查看 promise 以查看是否有任何存储的异常,并抛出它们。

这意味着您可以在 Promise 处理期间,在 Promise 处理结束时处理异常。

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2020-07-17
    相关资源
    最近更新 更多