-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPromise Time Limit.js
More file actions
56 lines (43 loc) · 1.71 KB
/
Promise Time Limit.js
File metadata and controls
56 lines (43 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// 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".
// Example 1:
// Input:
// fn = async (n) => {
// await new Promise(res => setTimeout(res, 100));
// return n * n;
// }
// inputs = [5]
// t = 50
// Output: {"rejected":"Time Limit Exceeded","time":50}
// Explanation:
// const limited = timeLimit(fn, t)
// const start = performance.now()
// let result;
// try {
// const res = await limited(...inputs)
// result = {"resolved": res, "time": Math.floor(performance.now() - start)};
// } catch (err) {
// result = {"rejected": err, "time": Math.floor(performance.now() - start)};
// }
// console.log(result) // Output
// The provided function is set to resolve after 100ms. However, the time limit is set to 50ms. It rejects at t=50ms because the time limit was reached.
// Code
/**
* @param {Function} fn
* @param {number} t
* @return {Function}
*/
var timeLimit = function(fn, t) {
return async function(...args) {
return new Promise ((resolve, reject)=>{
setTimeout(() => {reject ("Time Limit Exceeded")},t)
fn(...args).then(resolve).catch(reject)
})
}
};
/**
* const limited = timeLimit((t) => new Promise(res => setTimeout(res, t)), 100);
* limited(150).catch(console.log) // "Time Limit Exceeded" at t=100ms
*/