面试题——promise红绿灯

26 阅读1分钟

开篇吐槽

第一次遇到这个题,题目没强调日常红绿灯的场景,结果我还在想红黄绿到底要怎么闪烁,属于是题都看不懂
后面第二次遇到才明白场景是交通红绿灯,就是每个灯持续一段时间:
绿——绿(1s),黄——黄(2s),红——红(3s),绿......
通常要求使用promise和异步来实现这个效果,考察我们对异步函数和await的掌握(前提是理解题意)。

具体实现

function wait(time){
    return new Promise(function (resolve){
        setTimeout(resolve,time);
    })
}

async function light(){
    while(true){
        console.log("Green");
        await wait(1000);
        console.log("Yellow");
        await wait(2000);
        console.log("Red");
        await wait(3000);
    }
}

light()

注解说明

// 写一个sleep函数(异步版),返回一个异步耗时的promise
function wait(time){
    // 通过setTimeout和resolve的结合产生异步函数耗时控制效果
    return new Promise(function (resolve){
        setTimeout(resolve,time);
    })
}

// 因为使用sleep函数,所以light函数是异步
async function light(){
    // 循环红绿灯的执行
    while(true){
        // log “Green” 代表正在亮绿灯
        console.log("Green");
        // 通过await将异步函数同步执行,从而等待我们设置的时间,产生绿灯持续效果。
        await wait(1000);
        // 逻辑同上。
        console.log("Yellow");
        await wait(2000);
        console.log("Red");
        await wait(3000);
    }
}

light()

本文章仅供参考,欢迎纠错和建议。