2016-05-14 106 views
3

阵营本地的文档说:如果我有catch(),是否需要在承诺链的末尾调用done()?

注意,我们称之为()完成的承诺链的末端 - 始终确保调用完成()或抛出的任何错误都将得到吞噬。

当我最后有一个catch块时,是否需要考虑?

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

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

}) 
.catch(function(error) { 

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

}); 

回答

0

如果您catch块没有问题,那么就没有必要到done()添加到链的末端。在你提供的例子中,它应该没问题。但是,如果catch做了类似于尝试输出值this.state.foo的内容,则会生成一个可能被吞噬的错误。 (之所以this.state.foo不适用于我的潜在问题的示例,是因为您拥有的catch函数未绑定到this上下文,并且会导致错误。)在promise链的末尾添加.done()是很好的形式,多一点保险。

建议代码更新:

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

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

    }) 
    .catch(error => { 

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

    }) 
    .done(); 
相关问题