0
1

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 1 year has passed since last update.

非同期処理

Posted at

非同期とは

コールバック関数が代表される処理。

例1

function funcA(text) {
    text(); // funcBの処理
    console.log('3'); // funcAの処理
}

// コールバック関数 → funcAの呼び出し時に引数に指定される
function funcB() {
    console.log('2');
}

//実行
console.log('1');
setTimeout(() => {
    funcA(funcB);
}, 1000);
console.log('4');

これは1,4,2,3で出力。

例2

function funcA(text) {
    setTimeout(() => text(), 1000)
    console.log('3'); 
}
function funcB() {console.log('2');}

console.log('1');
setTimeout(() => {
    funcA(funcB);
}, 1000);
console.log('4');

これは1,4,3,2で出力。

同期処理は上から順番に実行されること。頭の中では、

(例1は

①1が出力

②setTimeout実行→1秒後funcAが実行

③funcAが実行

④textが実行→funcBが実行

⑤2が出力

⑥funcB終了→funcAの続きを実行

⑦3が出力

⑧funcA終了→ルートの実行に戻る

⑨4出力)

と思ってしまう。

例1,2も同期処理で実行コードの順番に実行されたら通常1→4できれいに並ぶはず、、、

実際、setTimeoutを抜くと1→4にきれいに並ぶ。

setTimeoutが悪い。setTimeoutなんか本番で使わないんじゃない?

しかし、本番のサイトとかではapiからgetしたりdbにconnectするのにわずかだが時間がかかる。

それを疑似的に作った場合setTimeoutが丁度いい。

どのように処理されているのか?

例1は

①1が出力

②setTimeout実行

③4出力

④1秒後funcAが実行→funcAが実行

⑤textが実行→funcBが実行

⑤2が出力

⑥funcB終了→funcAの続きを実行

⑦3が出力

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?