Javascript 是否可以实现同步使用非阻塞setTimeout的函数?
我想知道是否有可能将这2个IIF同步地称为它们在最后产生的类似的东西Javascript 是否可以实现同步使用非阻塞setTimeout的函数?,javascript,asynchronous,iif,Javascript,Asynchronous,Iif,我想知道是否有可能将这2个IIF同步地称为它们在最后产生的类似的东西 ###### ##### #### ### ## # # ## ### #### ##### ###### ? 下面的功能不会延迟控制台日志。其思想是通过一行一行的延迟来控制日志 (function whileLoop(n) { setTimeout(function () { let hashArr = Array.apply(null, Array(n)).map(() =&g
######
#####
####
###
##
#
#
##
###
####
#####
###### ?
下面的功能不会延迟控制台日志。其思想是通过一行一行的延迟来控制日志
(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);
(函数whileLoop(n){
setTimeout(函数(){
让hashArr=Array.apply(null,数组(n)).map(()=>{
返回哈希符号
});
console.log(hashArr);
if(-n)whileLoop(n);
}, 2000)
})(6);
(函数whileLoop(n,m){
setTimeout(函数(){
让hashArr=Array.apply(null,数组(n)).map(()=>{
返回哈希符号
});
console.log(hashArr);
if(n 处理两个不同异步操作的执行顺序的典型方法是使用承诺
var d=$.Deferred();
(函数whileLoop(n){
setTimeout(函数(){
让hashArr=Array.apply(null,数组(n)).map(()=>{
返回“#”
});
console.log(hashArr);
if(-n)whileLoop(n);
否则d.解决();
}, 2000)
})(6);
d、 然后(函数(){
(函数whileLoop(n,m){
setTimeout(函数(){
让hashArr=Array.apply(null,数组(n)).map(()=>{
返回“#”
});
console.log(hashArr);
if(n
为了让您逐个显示它,您需要使用async
wait
。
请检查这里:
const行=6;
(异步()=>{
for(设r=1;r=7?(r%6):行-r)+1));
}
})();
函数displaysync(str){
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
console.log(str);
解析(空);
}, 1000);
});
}
你就快到了。我知道您理解对setTimeout
的递归调用异步模拟while循环。我发现您了解如何决定何时继续“循环”以及何时停止:
if (--n) whileLoop(n);
您只需要意识到当if
条件为false时循环结束。因此,要运行第二个while循环,只需在else
中启动它:
if (--n) {
whileLoop(n);
}
else {
whileLoop2(1,6);
}
这会产生一些影响:
第二个whileLoop
必须重新写入而不是作为一个生命-它必须是在第一个whileLoop
结束时调用的常规函数,如上所述
不能对这两个函数重复使用名称whileLoop
。要区分函数,必须重命名第一个或第二个“循环”函数
这保留了您当前的逻辑,只需要更改4行即可获得所需的行为。您的意思是一行接一行?有很多方法可以实现所需的操作,但基本上您有两种选择:1。在第一个函数完成后,使用带有回调函数的承诺或某个实现来调用第二个函数。2.在两个函数的作用域中使用一个变量来设置第二个函数的启动条件。如果没有关于约束的更具体的信息,就很难更加准确。