首页 > 解决方案 > 是否可以同步实现使用非阻塞 setTimeout 的函数?

问题描述

我想知道是否可以同时调用这 2 个 IIF,它们最终会产生类似的结果?

######
#####
####
###
##
#
#
##
###
####
#####
###### ? 

下面的函数会延迟控制台日志。这个想法是用一些延迟逐行控制台日志。

 (function whileLoop(n) {
        setTimeout(function () {
            let hashArr = Array.apply(null, Array(n)).map(() => {
                return hashSymbol
            });
            console.log(hashArr);
            if (--n) whileLoop(n);
        }, 2000)
    })(6);

    (function whileLoop(n, m) {
        setTimeout(function () {
            let hashArr = Array.apply(null, Array(n)).map(() => {
                return hashSymbol
            });
            console.log(hashArr);
            if (n < m) {
                ++n;
                whileLoop(n, m);
            }
        }, 2000)
    })(1, 6);

标签: javascriptasynchronousiif

解决方案


为了让您一一显示,您需要使用async await. 请在此处查看:https ://javascript.info/async-await

 const row = 6;
    (async() => {
   for (let r = 1;r < row * 2; r++) {
     await displayAsync('#'.repeat((r >= 7 ? (r % 6) : row - r ) + 1));
   }
})();

function displayAsync(str) {
   return new Promise((resolve, reject) => {
      setTimeout(()=> {
       console.log(str);
       resolve(null); 
      }, 1000);
   });
}


推荐阅读