我有代码:
function sleep(ms){
return new Promise(function(resolve,reject){
setTimeout(function(){
resolve();
},ms)
});
}
let str = 'abcdef';
for(let i=0;i<str.length;i++){
sleep(1000);
console.log(str[i]);
}
如何每1秒打印一次str[i]
?这是代码示例,setInterval
不能解决我的问题!
答案 0 :(得分:0)
使用ES7,您可以将for循环包装在一个异步函数中,该函数等待sleep
承诺得到解决。
function sleep(ms){
return new Promise(function(resolve,reject){
setTimeout(resolve, ms)
});
}
let str = 'abcdef';
async function loop(){
for(let i = 0; i < str.length; i++) {
await sleep(1000);
console.log(str[i]);
}
}
loop()
当然,您可以使此函数更灵活地传递要循环的字符串作为参数。
function sleep(ms){
return new Promise(function(resolve,reject){
setTimeout(resolve, ms)
});
}
async function logSlowly(string){
for(let i = 0; i < string.length; i++) {
await sleep(1000);
console.log(string[i]);
}
}
logSlowly('abcdef')
答案 1 :(得分:0)
let str = 'abcdef';
for(let i=0;i<str.length;i++){
setTimeout(function() {
console.log(str[i])
}, 1000 * i)
}
答案 2 :(得分:0)
const str = 'mystring';
const printEveryOneSecond = (s) => {
for (let i = 0; i < s.length; i++) {
setTimeout( () =>{
console.log(s[i])
}, i * 1000)
}
}
printEveryOneSecond(str);
答案 3 :(得分:0)
我在想解决方案,您做了什么。我想解决您的问题的是以下代码段:
(function () {
let str = 'abcdef';
let timing = 0;
let printCharWithDelay = (character, timing) => {
setTimeout(function() {
console.log(character);
}, timing);
};
for(let i = 0; i < str.length; i++) {
printCharWithDelay(str[i], timing);
timing += 1000;
}
})();
我已经完全重组了代码,如果您运行它,您将获得所需的结果。
基本上,代码会延迟计算出的毫秒数打印通过的字符。显然,它可以简化,但这是了解setTimeout
在这种情况下的行为的一个很好的例子。
要进一步了解窗口setTimeout()
方法,请点击链接here。
答案 4 :(得分:0)