forked from pahadimunu/blocking-node
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
126 lines (105 loc) · 2.58 KB
/
Copy pathapp.js
File metadata and controls
126 lines (105 loc) · 2.58 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
const http = require("http");
const Express = require("express");
let Router = Express.Router();
const app = new Express();
Router.get("/block-me", async (req, res) => {
try {
await blockForTwoMinutes();
res.status(200).json({
isActionSuccess: true
});
} catch (error) {
res.status(500).json({
code: 123
});
}
});
Router.get("/block-me-2", async (req, res) => {
try {
await asyncAvg(9e10, function (avg) {
console.log('avg of 1-n: ' + avg);
res.status(200).json({
isActionSuccess: true,
avg: avg
});
});
} catch (error) {
res.status(500).json({
code: error,
error
});
}
});
Router.get("/browser", async (req, res) => {
try {
res.status(200).json({
isActionSuccess: true
});
} catch (error) {
res.status(500).json({
code: 456
});
}
});
app.use("/api", Router);
function asyncAvg(n, avgCB) {
try {
// Save ongoing sum in JS closure.
var sum = 0;
function help(i, cb) {
sum += i;
if (i == n) {
cb(sum);
return;
}
// "Asynchronous recursion".
// Schedule next operation asynchronously.
setImmediate(help.bind(null, i + 1, cb));
}
// Start the helper, with CB to call avgCB.
help(1, function (sum) {
var avg = sum / n;
avgCB(avg);
});
} catch (error) {
console.log(error);
}
}
async function blockForTwoMinutes2(n) {
try {
let sum;
for (let i = 0; i < n; i++) {
sum += i;
}
let avg = sum / n;
console.log('avg: ' + avg);
return avg;
} catch (error) {
console.log(error)
throw error;
}
}
async function blockForTwoMinutes() {
try {
let currentTime = Date.now();
/* add two minutes to current time */
currentTime += 10000;
/* block the event loop for two minutes */
setTimeout(() => {
while (Date.now() < currentTime) {
}
}, 0)
return;
} catch (error) {
throw error;
}
}
/* create server */
let __server = http.createServer(app);
__server.listen(3001);
__server.on("listening", () => {
console.log(`Application server started at http://localhost:3001`);
})
__server.on("error", (ex) => {
console.log(`Unable to start server ${ex.toString()}`);
})