我一直困惑了很長一段時間,試圖圍繞JavaScript承諾包紮我的頭。我想解決一些與我的代碼中的異步調用有關的問題,以便去除它。但我很樂意有專家來幫助我,因爲我已經浪費了相當一段時間了。因爲我已經在我的項目中使用了jQuery(v1.11),並且我不想再添加任何更多的庫(已經有5個以上),所以我想使用jQuery Deferreds。我讀過jQuery沒有完全遵循Promises/A規範,但我認爲它足夠用於我的用例。稍後我會看看q.js或其他庫。如何使用jQuery延遲(當/然後等)來修復厄運問題的異步金字塔
我試圖創建一個簡單的例子,我已經熟悉JavaScript的asynchroneous行爲,通過這太問題作爲例證: setTimeout delay not working
我創建了一個JS提琴,以解決用戶的問題,但使用「厄運的金字塔」結構: http://jsfiddle.net/bartvanderwal/31p0w02b/
現在我想的是如何使用的承諾和鏈接的方法調用,然後使用(拉平這個金字塔一個不錯的裸機爲例)的或東西:
$.when(takeStep())
.then(takeStep())
.then(takeStep())
.then(takeStep())..
但是我不能得到它的工作。我嘗試迄今在這個小提琴: http://jsfiddle.net/bartvanderwal/vhwnj6dh/
編輯20:58:這是現在的工作小提琴感謝(主要是)@Bergi: http://jsfiddle.net/bartvanderwal/h2gccsds/
謝謝@Bergi。對於指針來說,儘管這些延遲數組只是一箇中間的嘗試來獲得工作,但所有的優點。我把你的代碼放入(工作)JSFiddle中:[http://jsfiddle.net/bartvanderwal/h2gccsds/](http://jsfiddle.net/bartvanderwal/h2gccsds/) – Bart 2014-12-04 19:48:05
謝謝,很高興聽到它的作品 - 我didn沒有努力來測試它:-) – Bergi 2014-12-04 20:07:44
它沒有嚴格的工作,因爲'沒有編譯',因爲一些函數和常量(如'stepTime')缺失,但它們只是分散了答案。尋找編譯代碼的讀者應該去Fiddle :)。 – Bart 2014-12-04 20:29:12