面試題 LazyMan 的Rxjs實現方式

2021-09-12 21:54:25 字數 1374 閱讀 2951

筆者昨天在做某公司的線上筆試題的時候遇到了最後一道關於如何實現lazyman的試題,題目如下

實現乙個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

以此類推。

鑑於時間的原因只可惜本人當時並沒寫出來,我當時腦海裡其實看到提意就知道要用到佇列、promise等非同步操作。然後我查閱了網上的資料好像關於這個lazyman的實現方式倒不少,就說明這道題其實蠻有意思的,但大多都是關於promise或settimeout的實現,並沒有rxjs的實現方式,所以我就用一些操作符實現了這個lazyman

class lazymanmodel  = 

constructor() ),

concatall()

).subscribe(value => )})}

sleep(time: number): this `) }

})return this

}eat(foot: string): this ~`) }

})return this

}sleepfirst(time: number): this `) }

})return this

}exported(): (name: string) => this !`) }

})return this}}

}

示例

const lazyman = new lazymanmodel().exported();

lazyman('hank').eat('foot').eat('ping').sleep(10).eat('pizza').sleepfirst(5)

我在constructor建構函式裡使用了settimeout是因為,在呼叫的時候是鏈式的,其作用域一直都在同一堆疊,而settimeout裡則是把訂閱的方法放到的最後乙個棧執行

前端面試題 js實現LazyMan

實現乙個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 h...

微信前端面試題 js實現LazyMan

實現乙個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 h...

面試題 PHP面試題

建議 比如是系統配置,缺少了無法執行,自然使用 require 如果某一段程式少了,只是少了統計 訪問的,不是必不可少的。可以使用 include 而加不加 once 就是效率上的區別,雖然系統會幫你考慮只包含一次,但系統的判斷會降低效率,因此,更應該在開發之初,把目錄結構調整高好,盡量不使用 on...