再看一个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)
})
}复制代码
以上就是本地调试的过程 本地调试已经过 有好的解法 能够补充