Javascript 如何在JS中以1秒延迟逐行生成循环日志
我的代码将按照我想要的顺序记录所有10行(降序三角形),但我需要它在记录每一行之前延迟1秒。我尝试在for循环之前设置一个setTimeout,但这只会在同时打印所有10行之前造成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
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)谢谢,这正是我需要的。有人向我推荐使用setInterval,但我对它们不是很熟悉,所以我很欣赏这个演示!