Topic: Print 1 after one second, print 2 every two seconds, and print 3 every three seconds
First, use the normal setTimeout to complete:
setTimeout(() => {
console.log(1)
setTimeout(() => {
console.log(2)
setTimeout(() => {
console.log(3)
}, 3000)
}, 2000)
}, 1000)
This kind of nesting will look like a thousand-layer cake, which is not good-looking and not conducive to later maintenance, so there is a Promise object:
new Promise((resolve) => {
setTimeout(() => {
console.log(1)
resolve();
}, 1000)
}).then(() => {
console.log("1 done");
return new Promise((resolve) => {
setTimeout(() => {
console.log(2);
resolve();
}, 2000)
})
}).then(() => {
console.log("2 done");
return new Promise((resolve) => {
setTimeout(() => {
console.log(3);
resolve();
}, 3000)
})
}).then(() => {
console.log("3 done");
})
So is there a more comfortable way to write it?
ES7 added async await statement:
const pp1 = () => {
return new Promise((resolve) => {
setTimeout(() => {
console.log(1);
resolve();
}, 1000)
})
}
const pp2 = () => {
return new Promise((resolve) => {
setTimeout(() => {
console.log(2);
resolve();
}, 2000)
})
}
const pp3 = () => {
return new Promise((resolve) => {
setTimeout(() => {
console.log(3);
resolve();
}, 3000)
})
}
const noSameTime = async () => {
await pp1();
await pp2();
await pp3();
}
noSameTime();