V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
erwin985211
V2EX  ›  问与答

求助一道面试题

  •  
  •   erwin985211 · 2021-05-21 00:01:56 +08:00 · 1280 次点击
    这是一个创建于 1286 天前的主题,其中的信息可能已经有所发展或是发生改变。
    // 实现一个 Test,可以按照以下方式调用
    Test('tom') 
    //  hi, tom
    Test('tom').sleep(5).eat('dinner') 
    // hi, tom // 等待 5s // weak up 5 // eat dinner
    Test('tom').eat('dinner').eat('supper') 
    //  hi, tom  // eat dinner // eat super
    Test('tom').sleepFirst(5).eat('supper') 
    // 等待 5s // wake up 5 // hi, tom //  eat super
    
    7 条回复    2021-05-21 09:50:21 +08:00
    DGideas
        1
    DGideas  
       2021-05-21 00:13:02 +08:00
    老哥,要求什么编程语言都没写,就放一道“面试题”在这里让大家随便帮你做,逗虫子呢?
    renmu123
        2
    renmu123  
       2021-05-21 00:19:35 +08:00 via Android
    你就查一下怎么实现链式调用
    CEBBCAT
        3
    CEBBCAT  
       2021-05-21 00:26:58 +08:00
    简单的链式调用。Test() 返回一个指针,给指针定义 sleep eat sleepFirst 方法即可,这些方法同时也要返回传入的指针
    eason1874
        4
    eason1874  
       2021-05-21 00:44:09 +08:00   ❤️ 2
    好消息! V2EX 和 Google 合作了!复制代码到搜索引擎,点击搜索就可以看到问题解析!

    https://www.google.com/search?q=sleepFirst%285%29.eat%28%27supper%27%29+
    belowfrog
        5
    belowfrog  
       2021-05-21 00:52:04 +08:00   ❤️ 1
    function Test(name) {
    const queue = [() => console.log(name)];

    const result = {
    sleepFirst,
    sleep,
    eat,
    };

    async function execute() {
    while (queue.length) {
    const fn = queue.shift();
    await Promise.resolve(fn());
    }
    }

    function sleepFirst(time) {
    queue.unshift(
    () =>
    new Promise((resolve) => {
    setTimeout(resolve, time * 1000);
    })
    );

    return result;
    }

    function eat(food) {
    queue.push(() => console.log(food));
    return result;
    }

    function sleep(time) {
    queue.push(
    () =>
    new Promise((resolve) => {
    setTimeout(resolve, time * 1000);
    })
    );
    return result;
    }

    Promise.resolve().then(() => execute());

    return result;
    }
    suntorrent
        6
    suntorrent  
       2021-05-21 01:56:47 +08:00
    这是考察啥?
    erwin985211
        7
    erwin985211  
    OP
       2021-05-21 09:50:21 +08:00 via Android
    @belowfrog 谢谢老哥,现在我处于有点想法但是写不出来的阶段
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5483 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:06 · PVG 17:06 · LAX 01:06 · JFK 04:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.