2015-10-18 55 views
8

react-native tutorial它說:爲什麼我們必須在react-native的promise鏈末尾調用`.done()`?

注意,我們稱之爲()完成的承諾鏈的末端 - 總是 確保調用完成()或拋出的任何錯誤都將得到吞噬。

fetchData: function() { 
    fetch(REQUEST_URL) 
     .then((response) => response.json()) 
     .then((responseData) => { 
     this.setState({ 
      movies: responseData.movies, 
     }); 
     }) 
     .done(); 
    }, 

這是什麼空。 done()居然呢?

+1

「['then'函數中的未處理異常作爲promise的狀態的一部分靜靜捕獲,但'done'函數中的未處理異常被拋出](https://msdn.microsoft.com/zh-cn/我們/庫/窗/應用/ hh700337.aspx)。」如果你沒有做'完成',那麼發生的任何錯誤都存儲在承諾中,然後你將承諾扔掉,你永遠不會知道錯誤。 –

+0

我想這是理解正在發生的事情的開始,但是這意味着所做的事情沒有引起爭論? 「完成」實際上是什麼_do_? – GreenAsJade

+0

[文檔](https://msdn.microsoft.com/en-us/library/windows/apps/hh701079.aspx)解釋了當您不傳遞值時會發生什麼。 (基本上什麼也沒有發生。)問題是,如果沒有人處理它,'done'會引發異常,而'then'會將異常保存在promise中,以便將它傳播到下一個'then'調用中。問題是,如果沒有下一個'then',那麼異常永遠不會傳播到任何地方;它只是消失。結果是空的'done'意味着「立即提出任何未決異常。」 –

回答

2

我需要澄清:在承諾中遇到(在then()回調的執行期間)

  • 異常被存儲爲Error對象,沒有引發

這個機制意味着你可以推遲沒有任何異常風險的動作,在他們隨意的時間裏攪亂你。

  • done()在promise上沒有參數的情況下調用可以查看是否存在任何存儲的異常並拋出它們的承諾。

這意味着您可以在承諾處理期間處理承諾時處理異常。

相關問題