2017-09-15 18 views
1

下面是從英雄的遊覽教程Angular.io的一個代碼段:Angular的setTimeout的目的是什麼?

getHeroesSlowly(): Promise<Hero[]> { 
    return new Promise(resolve => { 
    // Simulate server latency with 2 second delay 
    setTimeout(() => resolve(this.getHeroes()), 2000); 
    }); 
} 

描述狀態:爲了模擬慢速連接,導入英雄符號和以下getHeroesSlowly()方法添加到HeroService。

據我所知,最好的做法是建立基於慢速連接的網站,其中兩個例子是herehere

但爲什麼我會設置一個計時器來測試,而不是節流(比如說在Chrome)的連接建立(像角暗示一個)?

+3

因爲它容易得多的教程給你一個簡單的代碼塊比它解釋如何使用您的開發工具,以節流網絡。 –

+0

然後讓我改說一下。是否有一段時間使用定時器而不是節流會更有益? – Liam

+0

是你的問題,具體到例子還是一般? –

回答

1

在您的例子的setTimeout被用於模擬在兩秒鐘服務器響應。這並不一定意味着它模擬慢速連接。由於各種原因,響應可能會在兩秒內完成,其中一個原因是服務器需要2秒才能完成作業。但是,正如您注意到的,這不是生產代碼,而是用於演示框架的特定功能。

setTimeout產品代碼中最常見的用途是讓角來,否則你將執行同步操作之間運行的變化檢測一次。在文章Everything you need to know about the ExpressionChangedAfterItHasBeenCheckedError error中,建議將此方法作爲錯誤的可能解決方案。

1

我認爲這一點是因爲它沒有實際打到服務器。我認爲getHeros方法只是返回硬編碼數據。他們正試圖證明你將如何使用Promises Angular風格,並且在返回之前等待幾秒鐘才能幫助你理解在實際擁有數據之前如何處理狀態。即。在迭代它們之前檢查以確保列表已填充。

3

這是API慢速連接的只是一個簡單的例子,當你引用,所以你可以看到裝載數據。如你所說,調節連接(在Chrome中)不會模擬API和客戶端之間的連接延遲,它會減慢整個網頁的速度。

更有趣的是同時使用這兩種技巧。