LoginSignup
1
0

More than 1 year has passed since last update.

javascript同期処理用の簡単なテンプレ

Last updated at Posted at 2022-04-09

主旨

普段jsを使いません。
なので、ネットに転がっている同期処理のソースコードは読みづらかったです。
健忘な自分にとってわかりやすい簡単なテンプレートを投稿しておきます。

テンプレ本体

temp.js

// ↓この行は無視。事前知識が必要なため。
const sleep = second => new Promise(resolve => setTimeout(resolve, second*1000));


// ↓ここからが主な部分。

// 実行したい処理を関数として定義する。
function f1() {
  console.log("f1");
}
function f2() {
  console.log("f2");
}
function f3() {
  console.log("f3");
}

// この関数の中に処理の流れを記述する。sleepは処理間の待ち時間。
async function work(_n) {
  f1();
  await sleep(_n);
  f2();
  await sleep(_n);
  f3();
}

// 待ち時間nを設定する。
const n = 3;
// 本処理を実行する。
work(n);

使い所

一度使ったらそれっきりの使い捨てスクリプトを書くときが使い所だと想定しています。

使い方

埋める点

テンプレですから、実際に使う際に埋める場所があります(埋める場所以外は見ない振りです。何か問題が起きたら見ればいいことです)。
下記3点を埋めます。

  1. 各fの名前と中身 : 順番に実行したい関数を、自分のつけたい名前と中身で定義してください。 例では3個になっていますが、9個でも27個でも構いません。
  2. work関数の中身 : 処理したい順序で上から順に、実行したい関数を並べてください。 各関数の間にsleepを挟むことを忘れずに。
  3. nの値 : 処理と処理の間に挟みたい秒数は何秒ですか? その秒数をnに格納してください。 つまり、n秒ごとに各fを次々に実行します。例えば、上記コードでは3秒毎になっています。また、n=0とすれば、間隔を開けずに、単に各fを上から順番に実行します。

蛇足

ここまでのことを例え話にすると、食パンを食べたいと思ったときのことを考えるとよいです。

  1. func1 : 食パンを買う
  2. func2 : 食パンを袋から出す
  3. func3 : 食パンを食べる

みたいにしてfuncの中身を実装して、順番が狂ってはならない手順を実行できます。

つまり、このテンプレを使うと、食パンを買ってないのに袋から出して食べてしまったり、食パンを袋から出さずに食べてしまうことを防げます。
お腹が空いていたらn=0です。あまり空いていないならn=72000です。

(追記:実行順序について次の投稿にて少し実験してみています。これによると、順番が狂う心配はせずに済みそうです。【未完のメモ】jsのasync/awaitについての実験。ただ、テンプレのようにsleepにawaitを付けないとsleepが機能しないことははっきりしました。)

反省

動けばいいのでやっつけな作りです。
時間が作れたらベストプラクティスについて学ぶつもりです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0