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:
fn
completes within the time limit of t
milliseconds, the time limited function should resolve with the result.fn
exceeds the time limit, the time limited function should reject with the string "Time Limit Exceeded"
.setTimeout
和 clearTimeout
函數,以設定和取消計時器。這是用來確保異步操作在指定時間內完成的重要工具。fn
以及時間限制 t
作為參數,然後使用這些參數來創建新的時間限制版本的函數。你需要了解如何在函數中處理這些引數。try...catch
來處理可能的錯誤情況。總結來說,這個題目主要測試你對異步編程、Promise、計時器函數和函數引數的理解和應用,以及你的錯誤處理能力。
setTimeout
是 JavaScript 中的函數,它允許我們在一定的時間後執行指定的程式碼。clearTimeout
用於取消計時器。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);
}
}
};