Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在JS中以1秒延迟逐行生成循环日志_Javascript_For Loop_Settimeout - Fatal编程技术网

Javascript 如何在JS中以1秒延迟逐行生成循环日志

Javascript 如何在JS中以1秒延迟逐行生成循环日志,javascript,for-loop,settimeout,Javascript,For Loop,Settimeout,我的代码将按照我想要的顺序记录所有10行(降序三角形),但我需要它在记录每一行之前延迟1秒。我尝试在for循环之前设置一个setTimeout,但这只会在同时打印所有10行之前造成1秒的延迟 function minusTen(num) { var arr = ''; for (var i = num; i > 0; i--) { arr += '*'; } var newArr = arr.split(''); for (var j = num; j &g

我的代码将按照我想要的顺序记录所有10行(降序三角形),但我需要它在记录每一行之前延迟1秒。我尝试在for循环之前设置一个setTimeout,但这只会在同时打印所有10行之前造成1秒的延迟

function minusTen(num) {
  var arr = '';
  for (var i = num; i > 0; i--) {
    arr += '*';
  }

  var newArr = arr.split('');

  for (var j = num; j > 0; j--) {
    newArr.pop();
    console.log(newArr.join(' '));
  }
}

minusTen(10);
我可以使用jQuery,但如果可能的话,我希望避免实现引导


谢谢大家!

您可以对其使用
setTimeout
,但是您必须将
setTimeout
保留在for循环中。您也可以在此处使用
setInterval
,如果num变为0,则清除间隔。大概是这样的:

const printStars = (n) => {

  // Make sure we don't try to print zero stars
  if (n > 0) {

    // Fill an array with n stars
    const arr = Array(n).fill('*').join(' ');
    console.log(arr);

    // After a second, reduce n by 1 and call
    // the function again
    setTimeout(() => printStars(--n), 1000);
  }
}

printStars(10);
函数最小值(num){
var-arr='';
对于(变量i=num;i>0;i--){
arr+='*';
}
var newArr=arr.split(“”);
var interval=setInterval(函数(){
newArr.pop();
控制台日志(newArr.join(“”));
num--;
如果(!num)
间隔时间;
}, 1000)
}

十(10)您可以使用函数。检查
newArr
.length
,如果大于
0
,请再次调用函数

函数最小值(num){
var-arr='';
对于(变量i=num;i>0;i--){
arr+='*';
}
var newArr=arr.split(“”);
函数fn(){
if(新到达长度)
setTimeout(函数(){
console.log(newArr.join(“”);
newArr.pop();
fn()
}, 1000)
其他的
log(“完成,newArr.length:”,newArr.length);
}
fn()
}

十(10)如果您想减少一点代码占用,可以这样做:

const printStars = (n) => {

  // Make sure we don't try to print zero stars
  if (n > 0) {

    // Fill an array with n stars
    const arr = Array(n).fill('*').join(' ');
    console.log(arr);

    // After a second, reduce n by 1 and call
    // the function again
    setTimeout(() => printStars(--n), 1000);
  }
}

printStars(10);

然而,这里值得指出的是,IE/Opera不支持

如果需要支持它们,请使用示例中的
for/loop
。在这里,我将代码分离为它自己的函数

const getStars = (n) => {
  let arr = [];
  for (let i = 0; i < n; i++) {
    arr.push('*');
  }
  return arr.join(' ');
}

const printStars = (n) => {
  if (n > 0) {
    console.log(getStars(n));
    setTimeout(() => printStars(--n), 1000);
  }
}
const getStars=(n)=>{
设arr=[];
for(设i=0;i{
如果(n>0){
console.log(getStars(n));
setTimeout(()=>printStars(-n),1000);
}
}

您可以使用带有偏移量的setTimeout。只需在log函数中添加所需的任何参数

function log(offSet) {
  setTimeout(() => {
    const str = new Array(offSet + 1).join('*');
    console.log(str);
  }, 1000 * offSet);
}

for(let i = 1; i < 11; i ++) {
  log(i);
}
功能日志(偏移量){
设置超时(()=>{
const str=新数组(偏移量+1).join('*');
console.log(str);
},1000*偏移量);
}
for(设i=1;i<11;i++){
日志(i);
}

使用async/await很简单<代码>延迟
在指定的时间内保持代码的执行

async函数的最小值(num){
var-arr='';
对于(变量i=num;i>0;i--){
arr+='*';
}
var newArr=arr.split(“”);
对于(var j=num;j>0;j--){
newArr.pop();
等待延迟(1000)
控制台日志(newArr.join(“”));
}
}
功能延迟(时间){
返回新承诺((解析)=>setTimeout(解析,时间))
}

十(10)