谈谈 异步事件 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)
    })
}复制代码

以上就是本地调试的过程 本地调试已经过 有好的解法 能够补充

相关文章
相关标签/搜索