如果我有catch(),是否需要在promise链的末尾调用done()?

时间:2016-05-14 20:04:52

标签: reactjs react-native

React Native的文档说:

  

请注意,我们在promise链的末尾调用done() - 始终确保调用done()或者抛出任何抛出的错误。

当我最后有一个捕获块时,它是否是必要的?

dataLayer.enter() {
 .then((responseData) => {

      console.log('enter responseData ->', responseData);

 })  
 .catch(function(error) {

    console.log('enter error ->', error)

 });

1 个答案:

答案 0 :(得分:0)

如果您的catch阻止没有问题,则无需在链的末尾添加done()。在您提供的示例中,它应该没问题。但是,如果catch尝试输出this.state.foo的值,则会生成可能被吞噬的错误。 (this.state.foo在我的潜在问题示例中不起作用的原因是您拥有的catch函数未绑定到this上下文并且会导致错误。)添加承诺链末尾的.done()是一种良好的形式和一点额外的保险。

建议的代码更新:

dataLayer.enter() {
  .then((responseData) => {

    console.log('enter responseData ->', responseData);

  })  
  .catch(error => {

    console.log('enter error ->', error)

  })
  .done();