如果我有一个数组[1, 2, 3, 4],如何利用promise,在每隔一秒,输出一个数字。用下面的代码会在一秒后,顺序输出1,2,3,4,大神能解释一下原因吗?
var arr = [1, 2, 3, 4]
var promises = []
arr.map(async (value) => {
promises.push(new Promise((res) => {
setTimeout(() => {
console.log(value)
res()
}, 1000)
}))
})
var promise = Promise.resolve()
for (var i = 0; i < promises.length; i += 1) {
const task = promises[i]
promise
.then(() => {
return task
})
}
一定要记得 new Promise(executor) 的 executor 是马上执行的。
所以要么你递增 timeout 的时间,要么在一个 Promise resolved 之后再创建新的 Promise。