成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

實(shí)現(xiàn)一個(gè)方法的鏈?zhǔn)秸{(diào)用

開發(fā) 前端
這個(gè)需求是一個(gè)典型的異步鏈?zhǔn)秸{(diào)用場景,尤其是?sleep?延遲后再繼續(xù)執(zhí)行后續(xù)操作。實(shí)現(xiàn)時(shí)關(guān)鍵在于:每次調(diào)用都注冊(cè)一個(gè)異步任務(wù);按順序排隊(duì)執(zhí)行(使用?Promise?鏈或任務(wù)隊(duì)列);每個(gè)方法返回?this?以保持鏈?zhǔn)秸{(diào)用。

題目描述

請(qǐng)使用 TypeScript 實(shí)現(xiàn)一個(gè)支持鏈?zhǔn)秸{(diào)用的 Cat 類,要求如下:

  1. cat.say("Tom"):立即輸出hello Tom到控制臺(tái);
  2. cat.sleep(3000):等待 3000 毫秒后再繼續(xù)執(zhí)行后續(xù)任務(wù);
  3. cat.bye("Bye"):輸出 Bye 到控制臺(tái)。

調(diào)用示例:

const cat = new Cat();
cat.say("Tom").sleep(3000).bye("Bye");

期望輸出:

hello Tom
# 等待 3 秒...
Bye

題目解析

這個(gè)需求是一個(gè)典型的 異步鏈?zhǔn)秸{(diào)用 場景,尤其是 sleep 延遲后再繼續(xù)執(zhí)行后續(xù)操作。實(shí)現(xiàn)時(shí)關(guān)鍵在于:

  • 每次調(diào)用都注冊(cè)一個(gè)異步任務(wù);
  • 按順序排隊(duì)執(zhí)行(使用 Promise 鏈或任務(wù)隊(duì)列);
  • 每個(gè)方法返回 this 以保持鏈?zhǔn)秸{(diào)用。

代碼實(shí)現(xiàn)

class Cat {
  private taskQueue: (() => Promise<void>)[] = [];

  constructor() {
    // 自動(dòng)開始執(zhí)行任務(wù)隊(duì)列
    Promise.resolve().then(() => this.runQueue());
  }

  private async runQueue() {
    for (const task of this.taskQueue) {
      await task();
    }
  }

  say(name: string): this {
    this.taskQueue.push(() => {
      return new Promise<void>((resolve) => {
        console.log("hello", name);
        resolve();
      });
    });
    return this;
  }

  sleep(ms: number): this {
    this.taskQueue.push(() => {
      return new Promise<void>((resolve) => {
        setTimeout(resolve, ms);
      });
    });
    return this;
  }

  bye(msg: string): this {
    this.taskQueue.push(() => {
      return new Promise<void>((resolve) => {
        console.log(msg);
        resolve();
      });
    });
    return this;
  }
}

// 使用方式
const cat = new Cat();
cat.say("Tom").sleep(3000).bye("Bye");

說明:

  • taskQueue 是一個(gè)異步任務(wù)列表。
  • 每個(gè)方法通過 this.taskQueue.push(() => Promise) 添加一個(gè)任務(wù)。
  • 構(gòu)造函數(shù)中立即開始異步執(zhí)行任務(wù)隊(duì)列。
  • sleep 實(shí)現(xiàn)延遲,后續(xù)任務(wù)自然排隊(duì)執(zhí)行。

拓展

如果要進(jìn)行逆向鏈?zhǔn)秸{(diào)用,如何實(shí)現(xiàn)呢?

cat.bye("Bye").sleep(2000).say("Say");

執(zhí)行順序:

Say
# 等待 2 秒...
Bye

所有方法仍然鏈?zhǔn)秸{(diào)用,但執(zhí)行順序以調(diào)用順序?yàn)闇?zhǔn),同時(shí) sleep 是延遲“下一個(gè)任務(wù)”的執(zhí)行,而不是“當(dāng)前任務(wù)”的延遲。

class Cat {
  private queue: { fn: () => void; delay: number }[] = [];
  private nextDelay = 0;

  constructor() {
    Promise.resolve().then(() => this.run());
  }

  private async run() {
    for (const task of this.queue) {
      if (task.delay > 0) {
        await new Promise((res) => setTimeout(res, task.delay));
      }
      task.fn();
    }
  }

  private addTask(fn: () => void): this {
    this.queue.push({ fn, delay: this.nextDelay });
    this.nextDelay = 0; // reset after applying
    return this;
  }

  say(msg: string): this {
    return this.addTask(() => {
      console.log(msg);
    });
  }

  bye(msg: string): this {
    return this.addTask(() => {
      console.log(msg);
    });
  }

  sleep(ms: number): this {
    this.nextDelay = ms; // apply to next task
    return this;
  }
}


責(zé)任編輯:武曉燕 來源: 宇宙一馬平川
相關(guān)推薦

2009-07-01 14:37:14

JavaScript異

2014-04-14 15:54:00

print()Web服務(wù)器

2023-12-14 12:56:00

鏈?zhǔn)?/a>調(diào)用代碼

2022-05-13 07:42:25

JS編程題LazyMan

2021-09-13 20:38:47

Python鏈?zhǔn)?/a>調(diào)用

2021-03-12 21:19:15

Python鏈?zhǔn)?/a>調(diào)用

2011-05-17 15:13:59

oracle分頁存儲(chǔ)

2011-07-14 14:36:29

Dbgrid多數(shù)據(jù)庫

2009-07-01 14:31:01

JavaScript異

2017-05-11 13:42:49

JavaScriptJQuery DataDOM

2010-09-06 10:38:25

SQL Server語句

2009-08-14 00:55:21

C#程序編譯

2012-08-07 11:28:13

卸載linux

2016-09-28 17:34:27

JavaScriptvueWeb

2022-03-24 14:58:02

Java散列表編程語言

2012-09-24 11:11:32

HTML5游戲開發(fā)JavaScript

2009-07-22 17:15:04

C#實(shí)現(xiàn)

2018-09-18 10:11:21

前端vue.jsjavascript

2021-07-20 10:30:46

Golanghttp語言

2009-08-10 10:08:45

.NET調(diào)用PHP W
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: av毛片 | 久久久久久免费毛片精品 | 日韩精品免费看 | 欧美午夜影院 | 激情av| 成人在线免费视频 | 91视频官网 | 久久综合激情 | 亚洲在线看| 日韩不卡在线观看 | 少妇性l交大片免费一 | 日韩欧美在线免费观看 | 成人久久久| 欧美理伦片在线播放 | 精品一二三区 | 成人午夜激情 | 国产成人网 | 色爱区综合 | 国产性色视频 | 一起操网站| 亚洲精品一 | 欧美日韩专区 | 伊人久久麻豆 | 成人av高清在线观看 | 亚洲精品视频一区二区三区 | 99国产精品久久久久 | av在线一区二区三区 | 日本视频免费 | 日韩精品一区二区三区中文在线 | 毛片视频免费观看 | 国产丝袜一区二区三区免费视频 | 免费观看一级毛片 | 人人种亚洲 | 81精品国产乱码久久久久久 | 精品视频一区二区三区在线观看 | 日韩精品久久一区二区三区 | 在线观看免费观看在线91 | 精品一区二区三区不卡 | av在线一区二区三区 | av一区二区三区四区 | 久久久久精 |