摘要:實(shí)現(xiàn)一個(gè),可以按照以下方式調(diào)用輸出輸出等待秒輸出輸出等待秒以此類推。這是典型的流程控制,問題的關(guān)鍵是如何實(shí)現(xiàn)任務(wù)的順序執(zhí)行。
實(shí)現(xiàn)一個(gè)LazyMan,可以按照以下方式調(diào)用: 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 以此類推。
這是典型的JavaScript流程控制,問題的關(guān)鍵是如何實(shí)現(xiàn)任務(wù)的順序執(zhí)行。在Express有一個(gè)類似的東西叫中間件,這個(gè)中間件和我們這里的吃飯、睡覺等任務(wù)很類似,每一個(gè)中間件執(zhí)行完成后會(huì)調(diào)用next()函數(shù),這個(gè)函數(shù)用來調(diào)用下一個(gè)中間件。
對于這個(gè)問題,我們也可以利用相似的思路來解決,首先創(chuàng)建一個(gè)任務(wù)隊(duì)列,然后利用next()函數(shù)來控制任務(wù)的順序執(zhí)行:
function _LazyMan(name) { this.tasks = []; var self = this; var fn =(function(n){ var name = n; return function(){ console.log("Hi! This is " + name + "!"); self.next(); } })(name); this.tasks.push(fn); setTimeout(function(){ self.next(); }, 0); // 在下一個(gè)事件循環(huán)啟動(dòng)任務(wù) } /* 事件調(diào)度函數(shù) */ _LazyMan.prototype.next = function() { var fn = this.tasks.shift(); fn && fn(); } _LazyMan.prototype.eat = function(name) { var self = this; var fn =(function(name){ return function(){ console.log("Eat " + name + "~"); self.next() } })(name); this.tasks.push(fn); return this; // 實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用 } _LazyMan.prototype.sleep = function(time) { var self = this; var fn = (function(time){ return function() { setTimeout(function(){ console.log("Wake up after " + time + "s!"); self.next(); }, time * 1000); } })(time); this.tasks.push(fn); return this; } _LazyMan.prototype.sleepFirst = function(time) { var self = this; var fn = (function(time) { return function() { setTimeout(function() { console.log("Wake up after " + time + "s!"); self.next(); }, time * 1000); } })(time); this.tasks.unshift(fn); return this; } /* 封裝 */ function LazyMan(name){ return new _LazyMan(name); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/50490.html
摘要:實(shí)現(xiàn)一個(gè),可以按照以下方式調(diào)用輸出輸出等待秒輸出輸出等待秒以此類推。這是典型的流程控制,問題的關(guān)鍵是如何實(shí)現(xiàn)任務(wù)的順序執(zhí)行。 實(shí)現(xiàn)一個(gè)LazyMan,可以按照以下方式調(diào)用: LazyMan(Hank)輸出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)輸出 Hi! This is H...
摘要:實(shí)現(xiàn)一個(gè),可以按照以下方式調(diào)用輸出輸出等待秒輸出輸出等待秒以此類推。這是典型的流程控制,問題的關(guān)鍵是如何實(shí)現(xiàn)任務(wù)的順序執(zhí)行。 實(shí)現(xiàn)一個(gè)LazyMan,可以按照以下方式調(diào)用: LazyMan(Hank)輸出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)輸出 Hi! This is H...
摘要:實(shí)現(xiàn)一個(gè),可以按照以下方式調(diào)用輸出輸出等待秒輸出輸出等待秒以此類推。這是典型的流程控制,問題的關(guān)鍵是如何實(shí)現(xiàn)任務(wù)的順序執(zhí)行。 實(shí)現(xiàn)一個(gè)LazyMan,可以按照以下方式調(diào)用: LazyMan(Hank)輸出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)輸出 Hi! This is H...
摘要:前言筆者昨天在做某公司的線上筆試題的時(shí)候遇到了最后一道關(guān)于如何實(shí)現(xiàn)的試題,題目如下實(shí)現(xiàn)一個(gè),可以按照以下方式調(diào)用輸出輸出等待秒輸出輸出等待秒以此類推。 前言 筆者昨天在做某公司的線上筆試題的時(shí)候遇到了最后一道關(guān)于如何實(shí)現(xiàn)LazyMan的試題,題目如下 實(shí)現(xiàn)一個(gè)LazyMan,可以按照以下方式調(diào)用:LazyMan(Hank)輸出:Hi! This is Hank!LazyMan(Hank...
閱讀 289·2024-11-07 18:25
閱讀 130366·2024-02-01 10:43
閱讀 868·2024-01-31 14:58
閱讀 828·2024-01-31 14:54
閱讀 82766·2024-01-29 17:11
閱讀 3048·2024-01-25 14:55
閱讀 1985·2023-06-02 13:36
閱讀 3033·2023-05-23 10:26