再看一個Promise的題目
題目:紅燈三秒亮一次,綠燈一秒亮一次,黃燈2秒亮一次;如何讓三個燈不斷交替重複亮燈?(用Promise實現) 三個亮燈函數已經存在: function red(){ console.log('red'); } function green(){ console.log('green'); } function yellow(){ console.log('yellow'); }promise
這道題要使用Promise實現 若是不用Promise實現那 估計很簡單 但Promise 也不難 我在本地調試了下 下面分享下思路bash
非promise解函數
我在本地調試時候 首先想的是 若是不重複那? 若是能夠 在寫重複的事情 重複的事情無非即便 for while 遞歸來實現 因而就調試了一個不重複的oop
function red(){ console.log('red'); } //紅
function green(){ console.log('green'); } //綠
function yellow(){ console.log('yellow'); } //黃複製代碼
上面給出的這個三個函數 下面定義了一個函數start(time, callbackfn) 來將上述的三個函數當成回調來以此打印出來ui
function start(time, callbackfn) {
var settime = setTimeout(function(){
callbackfn()
},time)
return settime
}
start(3000, red) //red
start(2000, yellow) //yellow
start(1000, green) //green複製代碼
上面打印一遍的已經ok 下面打印多變用的是setIntervalspa
setInterval(function(){
loop(start)
},6000)
function loop(start){
start(3000, red) //red
start(2000, yellow) //yellow
start(1000, green) //green
}複製代碼
上面能夠一直打印 調試
Promsiecode
一樣要先實現打印以此的遞歸
function start(time, callbackfn) {
var promise = new Promsie(function(res, rej){
setTimeout(function(){
callbackfn()
res()
})
})
return promise
}
start(3000, red) //red
start(2000, yellow) //yellow
start(1000, green) //green複製代碼
下面寫輪訓 string
var promise = new Promise(function(res, rej){
if(true) {
res()
}
})
loop(promise)
function loop(promise) {
promise.then(function() {
//執行red 完事之後返回Promise 接着yellow green
return start(3000, red)
}).then(function() {
return start(2000, yellow)
}).then(function() {
return start(1000, green)
}).then(function() {
都打印一遍後 接着loop
loop(promise)
})
}複製代碼
以上就是本地調試的過程 本地調試已經過 有好的解法 能夠補充