背景・目的
現在、Node.jsを使用したタイムアウトの実装を考えています。
私の考えている「タイムアウト処理」とは、
『ある関数の処理が、指定時間内に終了しなかった場合、その処理を強制的にリターン(or キル)させる』
というものです。
(例:sh/bash の timeoutコマンド)
しかし検索をかけても、Node.jsには私の考えている「タイムアウト処理」が見当たらなく、
代わりに「Promise.race(A, B)」を使用する例が多く書かれておりました。
該当のソースコード
Nodejs
1async function timeout(msec) { 2 return new Promise((_, reject) => setTimeout(reject, msec)) 3} 4 5// 時間の掛かる処理(円周率計算)を記述しています。 6// 負荷処理のサンプルとして記述しており、中身に関しては特に意味はありません。 7function calc_pi() { 8 console.log( 'start' ) 9 const begin = Date.now() // 実行時間を計測 10 11 var l = 0.0 12 for ( let n=1; n<1e10; ) // l = 1/1 - 1/3 + 1/5 - 1/7 + ... 1/1e10 (8s以内に終了) 13 { 14 l += 1.0 / n 15 n += 2 16 l -= 1.0 / n 17 n += 2 18 } 19 console.log( l * 4 ) 20 console.log( `${ ( Date.now() - begin ) / 1000 } sec.` ) // 実行時間を表示 21} 22 23async function main(timeout_ms) { 24 return Promise.race([calc_pi(), timeout(timeout_ms)]) 25} 26 27// 引数は "㎳" で指定 28main(1000);
解決したい事象
上記スクリプトは、
『1秒(1000ms)以内に処理が終了しない場合は、処理を終了(タイムアウト)させる』
を考えて作成したのですが、作成した上記スクリプトでは、1秒経過後も処理し続け、最終的に完了させるまで処理を実行してしまいます。
JavaScript初心者であり、非同期処理も慣れていない為か、もしかすると初歩ミスを犯している可能性と考えております。
どなたか、ご教授の程、どうかお願い致します。
補足情報(FW/ツールのバージョンなど)
OS:Windows 10 Pro
Node.js:v14.18.0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/11 07:50
2021/11/11 07:56
2021/11/11 07:59
2021/11/11 08:10