2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【アニメーション向け】async/await で待機時間を指定し順次実行する方法

Last updated at Posted at 2021-08-15

目的

  • async/await を使って順次実行する方法を例示する。
  • アニメーションなど、待機時間を指定して順次実行するもの例示とする。

前提

async/await の処理でよく例示されるのは API 周りのものが多いと思う。
一方アニメーション関連で、 async/await を使いたいと感じたが例が少ないと思ったのでまとめる。

やりたいこと

自然言語で書くと、以下のようになる。
これをネストなどなくシンプルに書きたい。

・ 500msかけて ボールを投げる
・ 100msかけて バットを振る

準備

時間指定をして実行を遅らせる delay メソッドを作っちゃえば事足りる。
duration の時間だけ実行を遅らせる。

const delay = (duration: number) => {
  return new Promise((resolve) => {
    setTimeout(() => resolve(null), duration);
  });
};

使い方

シンプルな使い方

一番単純には、以下のようになる。
startThrowingBallAnimationstartSwingingBatAnimation は アニメーションを開始させるだけで、アニメーションの終了をフィードバックしたりはしない。

(async () => {
  startThrowingBallAnimation();
  await delay(500);
  startSwingingBatAnimation();
  await delay(100);
}();

メソッドをまとめる

待ち時間と実行アニメーションをメソッドにまとめると便利になる。
async をつけて、 delay と アニメーションのメソッドを一緒にする

const throwBall = async () => {
  startThrowingBallAnimation()
  await delay(100);
}

引数を取ることや、戻り値を取ることもできるので、待ち時間を可変にしたりアニメーションメソッドの戻りを返したりもできる。

const swingBat = async (duration: number) => {
  const bat = startSwingingBatAnimation()
  await delay(duration);
  return bat;
}

自然言語に近い書き方で記述できた。

(async () => {
  throwBall();
  const bat = swingBat(100);
}();
2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?