談談 異步事件 Promise 題型2

再看一個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)
    })
}複製代碼

以上就是本地調試的過程 本地調試已經過 有好的解法 能夠補充

相關文章
相關標籤/搜索