[TS LeetCode 筆記] 2637. Promise Time Limit

更新於 發佈於 閱讀時間約 5 分鐘

原題目:

Given an asynchronous function fn and a time t in milliseconds, return a new time limited version of the input function. fn takes arguments provided to the time limited function.

The time limited function should follow these rules:

  • If the fn completes within the time limit of t milliseconds, the time limited function should resolve with the result.
  • If the execution of the fn exceeds the time limit, the time limited function should reject with the string "Time Limit Exceeded".

題目知識點:

  1. 異步編程概念: 考題要求理解和應用異步函數,這意味著你需要知道如何處理非同步操作,以確保代碼不會在等待操作完成時被阻塞。
  2. Promise 使用: 你需要了解 JavaScript 中的 Promise 如何工作,包括如何創建、解析、拒絕和處理 Promise。在這個題目中,你需要處理成功的 Promise 和被拒絕的 Promise。
  3. 計時器函數: 你需要了解 JavaScript 中的 setTimeoutclearTimeout 函數,以設定和取消計時器。這是用來確保異步操作在指定時間內完成的重要工具。
  4. 函數參數和引數: 題目要求你將一個函數 fn 以及時間限制 t 作為參數,然後使用這些參數來創建新的時間限制版本的函數。你需要了解如何在函數中處理這些引數。
  5. 錯誤處理: 這個題目要求你處理可能出現的錯誤,並返回指定的錯誤消息。你需要知道如何使用 try...catch 來處理可能的錯誤情況。

總結來說,這個題目主要測試你對異步編程、Promise、計時器函數和函數引數的理解和應用,以及你的錯誤處理能力。

先備知識:

  • setTimeout 和 clearTimeout: setTimeout 是 JavaScript 中的函數,它允許我們在一定的時間後執行指定的程式碼。clearTimeout 用於取消計時器。
  • Promise.race: Promise.race 是 Promise 的一個方法,它可以同時監控多個 Promise,並在其中任何一個 Promise 完成時返回該 Promise 的結果。

應用情境:

這段程式碼適用於網頁頁面開發中的各種場景,以下是一些實際例子:

  • 網頁請求超時控制: 在網頁應用程式中,當我們向伺服器發送網絡請求時,我們希望確保請求不會花費太長時間。這段程式碼可以用來設定一個時間限制,如果網絡請求在指定時間內未完成,它將立即返回一個錯誤,以確保用戶體驗不會受到阻礙。
  • 前端性能優化: 在前端開發中,我們常常需要執行一些計算或操作,以提高網頁性能。這段程式碼可用於設定最大執行時間,以確保這些操作不會對網頁的反應時間產生負面影響。
  • 遊戲開發: 在線遊戲或網頁遊戲中,我們可能需要控制特定遊戲事件的執行時間。使用這段程式碼,我們可以確保這些事件不會長時間阻塞遊戲的進行。

結論:

這段程式碼提供了一個有效的方法,用於在異步操作中添加時間限制,以確保它們不會花費過長的時間。它使用了 JavaScript 中的 Promise、setTimeout 函數和 Promise.race 方法,這些都是處理異步操作時的重要工具。當需要確保操作在合理時間內完成時,這段程式碼是一個有用的工具,它提高了應用程式的可靠性和用戶體驗。

解答

type Fn = (...params: any[]) => Promise<any>;

/**
 * @param {Function} fn
 * @param {number} t
 * @return {Function}
 */
function timeLimit(fn: Fn, t: number): Fn {
   
    return async function(...args) {
        let timer: ReturnType<typeof setTimeout>;
        const timePromise: Promise<void> = new Promise<void> ((_, reject) => {
            timer = setTimeout(() => reject('Time Limit Exceeded'), t);
        })
        try {
            const result = await Promise.race([fn(...args), timePromise]);
            return result;
        } finally {
            clearTimeout(timer);
        }
    }
};


留言
avatar-img
留言分享你的想法!
avatar-img
毛怪的沙龍
3會員
8內容數
"TypeScript LeetCode" 以 TypeScript 為工具,深入解析 LeetCode 上的算法和資料結構問題,提供清晰解釋和程式碼示範,幫助您精進 TypeScript 技能,解決挑戰性問題,無論您的程式開發水平如何。讓我們一同鑽研、提升,迎接算法挑戰,成長技術專長!,快速提高您的技能水平
毛怪的沙龍的其他內容
2023/10/19
題目摘要 給定一個整數陣列 `prices`,其中 `prices[i]` 代表第 `i` 天的股票價格。在每一天,你可以決定買入和/或賣出股票。然而,你同一時間只能擁有至多一股股票。你可以在同一天內買入然後立刻賣出股票。找出並返回你可以實現的最大利潤。
Thumbnail
2023/10/19
題目摘要 給定一個整數陣列 `prices`,其中 `prices[i]` 代表第 `i` 天的股票價格。在每一天,你可以決定買入和/或賣出股票。然而,你同一時間只能擁有至多一股股票。你可以在同一天內買入然後立刻賣出股票。找出並返回你可以實現的最大利潤。
Thumbnail
2023/10/19
題目摘要 給定一個陣列 prices,其中 prices[i] 代表第 i 天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
Thumbnail
2023/10/19
題目摘要 給定一個陣列 prices,其中 prices[i] 代表第 i 天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
Thumbnail
2023/10/16
題目摘要: 在這篇文章中,我們將討論如何使用摩爾投票算法找出一個陣列中的「主要元素」。主要元素指的是在陣列中出現次數超過一半的元素,並且我們可以確定它一定存在於陣列中。這個算法的核心思想和應用將在本文中被詳細介紹。 題目知識點: 主要元素的定義和重要性。 摩爾投票算法的工作原理和優點。 先備知識
Thumbnail
2023/10/16
題目摘要: 在這篇文章中,我們將討論如何使用摩爾投票算法找出一個陣列中的「主要元素」。主要元素指的是在陣列中出現次數超過一半的元素,並且我們可以確定它一定存在於陣列中。這個算法的核心思想和應用將在本文中被詳細介紹。 題目知識點: 主要元素的定義和重要性。 摩爾投票算法的工作原理和優點。 先備知識
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
在 Kotlin 程式語言中,while 迴圈是用來重複執行區塊內程式碼,只要滿足特定條件就會持續運行,一旦條件不滿足,迴圈就會停止執行。這種特性讓你能夠以更靈活的方式處理程式邏輯,並在滿足特定情況時停止迴圈的執行。
Thumbnail
在 Kotlin 程式語言中,while 迴圈是用來重複執行區塊內程式碼,只要滿足特定條件就會持續運行,一旦條件不滿足,迴圈就會停止執行。這種特性讓你能夠以更靈活的方式處理程式邏輯,並在滿足特定情況時停止迴圈的執行。
Thumbnail
題目會給定我們兩個點座標,分別是起點和終點。 另外,還有一個參數t,代表時間限制。 從起點出發之後,每一秒鐘,我們必須選擇一個N8 8連通的方向,往鄰居的格子點移動。(題目有特別強調,每一秒必須強制移動到下一個格子點,不能停留在原地) 請問我們能不能在時間限制內,從起點走到終點?
Thumbnail
題目會給定我們兩個點座標,分別是起點和終點。 另外,還有一個參數t,代表時間限制。 從起點出發之後,每一秒鐘,我們必須選擇一個N8 8連通的方向,往鄰居的格子點移動。(題目有特別強調,每一秒必須強制移動到下一個格子點,不能停留在原地) 請問我們能不能在時間限制內,從起點走到終點?
Thumbnail
這篇文章介紹了如何建立一個時間限制的異步函數,以確保操作在指定時間內完成。 - 知識點包括異步編程、Promise使用、計時器函數和函數引數處理,以及錯誤處理。 - 應用情境包括網頁請求超時控制、前端性能優化和遊戲開發。 - 提高應用程式的可靠性和用戶體驗,確保操作不會花費過長的時間。 - 文章內
Thumbnail
這篇文章介紹了如何建立一個時間限制的異步函數,以確保操作在指定時間內完成。 - 知識點包括異步編程、Promise使用、計時器函數和函數引數處理,以及錯誤處理。 - 應用情境包括網頁請求超時控制、前端性能優化和遊戲開發。 - 提高應用程式的可靠性和用戶體驗,確保操作不會花費過長的時間。 - 文章內
Thumbnail
題目:完成解決方案,當第一個參數(String 型別)以第二個參數結尾時(也是 String 型別)返回 true。
Thumbnail
題目:完成解決方案,當第一個參數(String 型別)以第二個參數結尾時(也是 String 型別)返回 true。
Thumbnail
程式建立thread,然後會交給硬體中的scheduler去排定執行、切換資源 我們無法強制指定順序,因為電腦有太多任務需要執行,但資源有限,因此會由scheduler去分配、切換資源 電腦能同時執行多項任務
Thumbnail
程式建立thread,然後會交給硬體中的scheduler去排定執行、切換資源 我們無法強制指定順序,因為電腦有太多任務需要執行,但資源有限,因此會由scheduler去分配、切換資源 電腦能同時執行多項任務
Thumbnail
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
Thumbnail
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
Thumbnail
題目:建立一個傳回值乘以 50 並增加 6 的函數。如果輸入的值是字串,則應傳回「Error」。
Thumbnail
題目:建立一個傳回值乘以 50 並增加 6 的函數。如果輸入的值是字串,則應傳回「Error」。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News