JavaScriptで遅延処理(Sleep)を行う

https://qiita.com/asa-taka/items/888bc5a1d7f30ee7eda2

https://qiita.com/soarflat/items/1a9613e023200bbebcb3

async/await と Promise を活用する。

コールバック地獄を脱出できる。

古い場合は、chrome:flags で #enable-javascript-harmony を有効にすること。

-

view source

JavaScript

const sleep = msec => new Promise(resolve => setTimeout(resolve, msec));
var i = 0;
var target = document.getElementById('target');
var printTime = function(){
  i++;
  val = i + ':' + new Date().getSeconds();
  console.log(val);
  target.textContent = val;
};
//↑セミコロンがないと次の(async () => {})();で以下エラーが起きる
//TypeError: (intermediate value)(...) is not a function




// 配列 forEach内では Promise.all を使う ダメ
/*
const sleptLog = async val => {
  await sleep(1000);
  console.log('sleptLog', val);
};
const testFunc = async () => {
  var arr = [99,98,97];
  await Promise.all(arr.map(async item => await sleptLog(item)))
  console.log('done!');
};
testFunc();
*/


// 配列 forEach内では asyncForEach を使う
//https://codeburst.io/javascript-async-await-with-foreach-b6ba62bbf404

async function asyncForEach(array, callback) {
  for (let index=0, len=array.length; index<len; index++) {
    await callback(array[index], index, array)
  }
}

const testEachFunc = async () => {
  var eles = $('#forEach li');
  var ary = $.makeArray(eles);
  asyncForEach(ary, async (item, index) => {
    await eles.eq(index).text(index);
    await sleep(3000);
  })
  console.log('li dones?!');
};


(async () => {
  const a = [1,2,3,4,5,6,7,8];
  console.log('start');
  for(let i of a){
    console.log(i);
    printTime();
    await sleep(1000);
  }
  console.log('end');

})();



testEachFunc();





// fetch との組み合わせ
var urls = [
  'https://ajax.googleapis.com/ajax/libs/d3js/5.7.0/d3.min.js',
  'https://ajax.googleapis.com/ajax/libs/hammerjs/2.0.8/hammer.min.js',
];
(async () => {
  var wrap = document.getElementById('demo');
  await Promise.all(urls.map(function(url){
    console.log(url);
    fetch(url)
      .then((res) => {
        return res.text();
      })
      .then((text) => {
        console.log(text);
      });
  }));
})();

CSS

HTML

ページのソースを表示 : Ctrl+U , DevTools : F12

view-source:https://hi0a.com/demo/-js/js-sleep-delay-async-await/

ABOUT

hi0a.com 「ひまアプリ」は無料で遊べるミニゲームや便利ツールを公開しています。

プログラミング言語の動作デモやWEBデザイン、ソースコード、フロントエンド等の開発者のための技術を公開しています。

必要な機能の関数をコピペ利用したり勉強に活用できます。

プログラムの動作サンプル結果は画面上部に出力表示されています。

環境:最新のブラウザ GoogleChrome / Windows / Android / iPhone 等の端末で動作確認しています。

画像素材や音素材は半分自作でフリー素材配布サイトも利用しています。LINK参照。

動く便利なものが好きなだけで技術自体に興味はないのでコードは汚いです。

途中放置や実験状態、仕様変更、API廃止等で動かないページもあります。