一个经典的面试题,网上大都提供了两种方案(var闭包 和let块作用域),这里提供使用Promise的另外两种方案
function queue(num){
let promise = Promise.resolve()
num.forEach(v=>{
promise = promise.then(_ =>{
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(v)
resolve()
},1000)
})
})
})
}
function queue1(num){
num.reduce((promise,n)=>{
return promise.then(_ =>{
return new Promise(resolve => {
setTimeout(()=>{
console.log(n)
resolve()
},1000)
})
})
},Promise.resolve())
}
queue([1,2,3,4,5])
async function show(){
for (const argument of [1,2,3,4,5,6,7,8,9,10]) {
await new Promise(resolve => {
setTimeout(()=>{resolve()},1000)
})
console.log(argument)
}
}
show()
for (let i = 0; i < 10; i++) {
setTimeout(()=>{
console.log(i)
},1000*i)
}
for (var i = 1; i < 11; i++) {
(function(i){
setTimeout(()=>{
console.log(i)
},1000*i)
})(i)
}