浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【JavaScript 】throw式的なものを作る小技、時や分が0になった瞬間に処理が発火する setIntervalの小技

 一つの記事にできるほどでもない JavaScript の小技二つの紹介です。

 一つ目は JavaScript で throw 式を作る方法です。本来 JavaScript の throw は文であり、次の様に使います。

throw – JavaScript | MDN

// JavaScript として問題がないパターン
function abs(a){
  if(typeof a !== 'number' || Number.isNaN(a)) {
    throw new Error('a は数値である必要があります。');
  }
  return Math.abs(a);
}
// JavaScript としてエラーが起きるパターン
function abs(a){
  return (typeof a === 'number' && !Number.isNaN(a))
    ? Math.abs(a)
    : throw new Error('a は数値である必要があります。');
}

 エラーが起きるパターンでは三項演算子の中に組み込むのは式である必要があるのに、それを無視して throw を記述しているためエラーが起きます。こういった書き方をしたい時、throw 式があると便利です。その throw 式の作り方が次です。

// throw だけの関数を用意します
const throwExpression = (err) => {
  throw err;
};
function abs(a){
  return (typeof a === 'number' && !Number.isNaN(a))
    ? Math.abs(a)
    // 関数の呼び出しは式なので構文エラーになりません
    : throwExpression(new Error('a は数値である必要があります。'));
}

 これだという使い道はあまりありませんが、こんな感じで throw 式的なものを作れます。

 二つ目は setInterval で例えば13時5分ちょうど、13時6分ちょうどに処理を発火させる方法の紹介です。
 setInterval は特定の間隔で処理を繰り返し実行するために用意されている JavaScript の組み込み関数です。

setInterval() – Web APIs | MDN

 これはミリ秒単位で繰り返しを指定する関数であり、素直に使うと実行時から1分おき、実行時から30秒おき、に処理が実行されます。これを分が変わった時ちょうどなどに定期実行させたい時があります。これは次でできます。

 実装は次です。

// 分が変わった時ちょうどに実行するパターン
setInterval(()=>{
  if(new Date().getSeconds() !== 0){
     // 毎秒実行して、x時y分z秒がx時y分0秒の時だけ処理本体が実行される様にする
     return;
  }
  // 処理本体
  console.log(`fire ${new Date()}`)

},1000) // 1秒ごとに実行

 例では 0 秒時に実行としていますが 0 or 30 で30秒ごと、getMinutes % 15 === 0 で15分ごとなど様々な応用ができます。

  • この記事いいね! (0)