JavaScriptのスリープ関数の使用

JavaScriptのスリープ関数の使用

1.スリープ機能

JavaScript は単一のスレッドで実行され、組み込みの sleep 関数がありません。ここでは、sleep を使用して実行を遅延させる効果をシミュレートします。

スリープ機能を使用して、信号コードを実装します。赤色の信号が 2 秒間、黄色の信号が 1 秒間、緑色の信号が 3 秒間点灯し、色が周期的に変化します。

2.タイムアウトを設定する

setTimeout を直接使用して sleep() を実装する方法は互換性が最も高くなりますが、コールバック関数を使用した実装方法ではコードの可読性と保守性が低下します。

// タイムアウトを設定する
let fun = () => console.log('time out');
sleep = function(fun,time){ とする
  タイムアウトを設定します(()=>{
    楽しい();
  }、時間);
}

睡眠(楽しい、2000);

タイムアウトの設定
setTimeout は最も基本的な実装方法です。コードは次の通りで、再帰を使用して周期的な色の変更を実装します。
関数 changeColor(色) {
 console.log('信号機', 色);
}
関数main() {
 色を変更します('赤');
 タイムアウトを設定します(()=>{
  色を変更します('黄色');
  タイムアウトを設定する(() => {
   色を変更します('緑');
   setTimeout(メイン、2000);
  }, 1000);
 }, 2000);
}
主要();

3. 約束

ES6 構文では、Promise は sleep メソッドを非同期に実装する方法です。Promise メソッドを使用すると、関数コールバックの使用を回避しながら、 sleep 実装メソッドをエレガントに構築できます。

// 約束
let fun = () => console.log('time out');
sleep2 = (time) => new Promise((resolve) => { とします。
  setTimeout(解決、時間)
})
sleep2(2000).その後(楽しい);

約束

Promise を使用して次の色の変更を書き込み、最後に再帰を使用してループを完了します。

setTimeout の代わりに promise を使用し、チェーン呼び出しと then を使用して軽量変換を実現します。 then は promise オブジェクトを返します。このオブジェクトが解決された状態にある場合、 then を継続的に呼び出すことができます。

const traffic_light=(色,持続時間)=>{
  新しい Promise を返します ((resolve,reject)=>{
    console.log('信号機', 色);
    タイムアウトを設定します(()=>{
        解決する()
    }、間隔)
  })
}
定数main=()=>{
    Promise.resolve()
    .then(()=>{
        戻り値: traffic_light('red',3000)
    })
    .then(()=>{
        戻り値: traffic_light('yellow',1000)
    })
    .then(()=>{
        戻り値: traffic_light('green',2000)
    })
    .then(()=>{
        主要();
    })
}
主要()

4. 非同期待機

async await は、実際には generator と promise の構文糖衣です。非同期呼び出しを実装するための同期プログラミング メソッドを提供し、sleep 関数のセマンティクスもサポートします。また、sleep を実装するためによく使用される方法でもあります。

// 非同期待機
非同期関数 wait(time){
  sleep2(時間)を待ちます。
  楽しい();
}

待機(3000);

非同期待機の使用

async await を使用すると Promise の .then.then.then の連続を回避でき、再帰の必要がなくなります。while(true) を使用してループを実装できます。

関数 sleep(期間) {
  新しいPromiseを返します(resolve => {
      setTimeout(解決、期間);
  })
}
非同期関数changeColor(色, 期間) {
 console.log('信号機', 色);
 スリープを待機します(期間);
}
非同期関数main() {
 (真)の間{
  'red' という値の変化を待ちます。
  色の変更を待ちます('黄色', 1000);
  色の変更を待ちます('green', 3000);
 }
}
主要();

5. 1秒後に出力1、2秒後に出力2、3秒後に出力3

コンソールにログを出力します。
const sleep = (タイムアウト) => {
  新しいPromise((resolve)=>{ を返す
    タイムアウトを設定します(()=>{
      解決する();
    }、 タイムアウト)
  })
}

定数main = async()=>{
  スリープ(1000)を待機します。
  ログ(1);
  眠りを待つ(2000)
  ログ(2);
  スリープを待機します(3000);
  ログ(3);
}

参考記事:

信号機 信号機

JavaScript のスリープ関数の使い方に関するこの記事はこれで終わりです。JavaScript のスリープ関数に関するより関連性の高い内容については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript 関数型プログラミングの基礎
  • JS関数の継承について学ぶ記事
  • JavaScript 基礎シリーズ: 関数とメソッド
  • JS関数の呼び出し、適用、バインドの超詳細な方法
  • JavaScript 関数呼び出し、適用、バインド メソッドのケース スタディ
  • JavaScript の矢印関数と通常の関数の違いの詳細な説明
  • JavaScript の知識: コンストラクタも関数である
  • JavaScript における変数と関数の昇格の詳細な例
  • JavaScript の 50 以上のユーティリティ関数の概要
  • 集める価値のある 15 個の JavaScript 関数

<<:  MLSQL スタックでストリームのデバッグを簡単にする方法

>>:  Linux を使用して時間指定ファイルが占有するディスク容量を計算する方法

推薦する

CSS スタッキングと Z インデックスのサンプルコード

カスケードとカスケードレベルHTML 要素は 3 次元の概念です。水平方向と垂直方向に加えて、「Z ...

この構成ファイルの排他ロックに失敗したという VMware 仮想マシンのプロンプトの解決方法

VMware が異常シャットダウンした後、再起動すると「この構成ファイルを排他的にロックできませんで...

Navicat Premium が MySQL 8.0 に接続してエラー「1251」を報告する問題を解決する方法の分析

長い間何もしていなかった人は、努力をすると一生懸命働いていると思うようになります。 1. 問題Nav...

MySQL のメモリ使用量と CPU 使用率が高い場合のテストと解決策

変更後: innodb_buffer_pool_size=576M ->256M InnoDB...

MySQL リンクを表示し、異常なリンクを削除する方法

序文:データベースの運用や保守の際には、リンクの総数がいくつあるか、アクティブなリンクがいくつあるか...

MySQLで日付を比較する方法の詳細な説明

データ型が datetime であるフィールド add_time を持つテーブル product が...

MySQL の同時実行性の問題と解決策の分析

目次1. 背景2. テーブルロックによるクエリの遅延3. オンラインでテーブル構造を変更するとどのよ...

ウェブページのメモリとCPU使用量を削減する方法

<br />Web ページによっては、サイズは大きくないように見えても開くのに非常に時間...

柔軟で安定した高品質の HTML および CSS コード標準を作成するためのガイド

黄金律常に同じコーディング標準セットに従ってください。同じプロジェクトに何人の人が関わっているかに関...

MySQL のフィールドにデフォルトの時間を追加する方法

日付型の違いと用途MySQL には、日付、時刻、年、日付時刻、タイムスタンプの 5 つの日付タイプが...

Linux の RPM パッケージでインストールされた xinetd ベースのサービスの管理

目次序文1. xinetdサービスに基づく起動管理(1)Telnetサービスのインストール(2)Te...

VMware Workstation 15 Pro インストール ガイド (初心者向け)

01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...

フロントエンドページのポップアップマスクはページのスクロールを禁止します

フロントエンド開発者がよく遭遇する問題は、ユーザーに情報を提示するためのポップアップ ウィンドウを作...

CentOS7 インストール Zabbix 4.0 チュートリアル (イラストとテキスト)

SeLinuxを無効にするsetenforce 0永久に閉店: vi /etc/selinux/c...

VMWARE で Centos8 仮想マシンをコピーすることによって発生する IP 損失の問題の解決策

VMwareでcentos8サービスをインストールしてコピーすると、次の問題が発生します。 コピー前...