美文网首页
做完两道题,理解Promise

做完两道题,理解Promise

作者: lxf_李晓凤 | 来源:发表于2017-06-21 17:41 被阅读568次

解题之前建议大家先看看promise的文档[https://segmentfault.com/a/1190000002452115]

第一题:promise应用的面试题

红灯三秒亮一次,绿灯一秒亮一次,黄灯2秒亮一次;如何让三个灯按照这个规律不断交替重复亮灯?(用Promse实现)三个亮灯函数已经存在:
function red(){
console.log('red');
}
function green(){
console.log('green');
}
function yellow(){
console.log('yellow');
}*

//已知函数
function red(){
    console.log('red');
}
function green(){
    console.log('green');
}
function yellow(){
    console.log('yellow');
}*
//亮灯一次 函数
var lightUp = function(timmer, cl){
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            cl();
            resolve();
        }, timmer);
    });
};

//promise 
var myPromise = new Promise(function(resolve, reject){resolve();});
var step = function(pro) {
    pro.then(function(){
        return lightUp(3000, red);
    }).then(function(){
        return lightUp(1000, green);
    }).then(function(){
        return lightUp(2000, yellow);
    }).then(function(){
        //递归
        step(pro);
    });
}
 
step(myPromise);
第二题:

实现一个LazyMan,可以按照以下方式调用:
LazyMan(“Hank”)输出:
Hi! This is Hank!
LazyMan(“Hank”).sleep(10).eat(“dinner”)输出
Hi! This is Hank!
//等待10秒..
Wake up after 10
Eat dinner~
LazyMan(“Hank”).eat(“dinner”).eat(“supper”)输出
Hi This is Hank!
Eat dinner~
Eat supper~
LazyMan(“Hank”).sleepFirst(5).eat(“supper”)输出
//等待5秒
Wake up after 5
Hi This is Hank!
Eat supper
以此类推。

//等待函数
function wait(second) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve('Wake up after ' + second);
        }, second * 1000);
    });
}

//链式+promise
var  LazyMan = function(name) {
    var p = new Promise(function (resolve, reject) {
        resolve('Hi! This is ' + name + '!');
    });

    return {
        sleep: function (second) {
            p = p.then(function (msg) {
                console.log(msg);
                return wait(second);
            });
            return this;
        },
        sleepFirst: function (second) {
            var op = p;
            p = wait(second).then(function (msg) {
                console.log(msg);
                return op;
            });
            return this;
        },
        eat: function (part) {
            var pn = new Promise(function (resolve) {
                resolve('Eat ' + part + '~');
            });
            p = p.then(function (msg) {
                console.log(msg);
                return pn;
            });
            return this;
        },
        print: function () {
            return p.then(function (msg) {
                console.log(msg);
            });
        }
    };
}
exports.LazyMan = LazyMan;

本题有多种方案,感兴趣的可以尝试面向对象等其他方式来实现。

相关文章

  • 做完两道题,理解Promise

    解题之前建议大家先看看promise的文档[https://segmentfault.com/a/11900000...

  • 深圳农商银笔试题

    两道智力题,两道计算机基础题,一道编程题。 第一题:一昼夜时间时针和分针重合多少次。用套圈的方法理解,时针12小时...

  • Promise async/await

    Promise async/await 参考初探promise promise 理解 JavaScript ...

  • 卢俊杰亲子日记2018-05-24星期四天气晴

    今天下午放学俊杰在写数学作业时有两道题不会,我给提示了一下,他很快就理解并做对了。这两道题是有点小难度,我担心他没...

  • L1W4多层神经网络--深度学习笔记

    如何使用多层神经网络来进行预测?在使用jupyter notebook做完两道编程题之后,实在厌倦了没有提示的环境...

  • 2020-04-17第九天

    2020-4-17 21:12签到。继续还是三道题。两道easy,一道medium。 第一道easy题:理解了...

  • Promise原理解析

    Promise原理解析 标签(空格分隔): Node.js Promise原理解析 简介 Promise 对象用于...

  • 育儿篇(没有硝烟的战争)

    快十一点的时候,叫宇淳赶紧做两道数学计算题和背默五个单词,做完快睡觉,毕竟不早了。但是算来算去,两道数学题都...

  • 2018年3月27日 星期二 晴 亲子日记第二十六篇

    还没回家就看见尚宸英语考试的成绩了。回家看看试卷错了三道题,选择错两道,判断题错一道。选择题因为理解错了;...

  • Promise 题

    说明 最近在复习 Promise 的知识,所以就做了一些题,这里挑出几道题,大家一起看看吧(转载)。 题目一 解析...

网友评论

      本文标题:做完两道题,理解Promise

      本文链接:https://www.haomeiwen.com/subject/hqytcxtx.html