下面來(lái)看一道比較典型的問(wèn)題,通過(guò)這個(gè)問(wèn)題來(lái)對(duì)比幾種異步編程方法:紅燈 3s 亮一次,綠燈 1s 亮一次,黃燈 2s 亮一次;如何讓三個(gè)燈不斷交替重復(fù)亮燈?
三個(gè)亮燈函數(shù):
這道題復(fù)雜的地方在于需要“交替重復(fù)”亮燈,而不是“亮完一次”就結(jié)束了。
(1)用 callback 實(shí)現(xiàn)
這里存在一個(gè) bug:代碼只是完成了一次流程,執(zhí)行后紅黃綠燈分別只亮一次。該如何讓它交替重復(fù)進(jìn)行呢?
上面提到過(guò)遞歸,可以遞歸亮燈的一個(gè)周期:
注意看黃燈亮的回調(diào)里又再次調(diào)用了 step 方法 以完成循環(huán)亮燈。
(2)用 promise 實(shí)現(xiàn)
這里將回調(diào)移除,在一次亮燈結(jié)束后,resolve 當(dāng)前 promise,并依然使用遞歸進(jìn)行。
(3)用 async/await 實(shí)現(xiàn)