在js中有一个map循环,总共循环三次,现在让它每一轮循环都要等待上一轮循环结束才开始,怎么写
时间: 2023-11-29 13:08:03 浏览: 60
你可以使用`async/await`或者`Promise`来实现每一轮循环都等待上一轮循环结束才开始。以下是使用`async/await`实现的示例代码:
```javascript
async function loop(arr) {
for (let i = 0; i < arr.length; i++) {
await new Promise(resolve => setTimeout(resolve, 1000)); // 等待上一轮循环结束
console.log(arr[i]);
}
}
const arr = [1, 2, 3];
loop(arr);
```
在上面的代码中,我们使用了`async/await`来实现等待上一轮循环结束的功能。在循环内部,我们使用`await`来等待一个`Promise`对象,这个`Promise`对象会在1秒钟后`resolve`,然后才会执行下一轮循环。这样就可以实现每一轮循环都等待上一轮循环结束才开始的效果。
你也可以使用`Promise`来实现相同的效果,以下是使用`Promise`实现的示例代码:
```javascript
function loop(arr) {
return arr.reduce((p, item) => {
return p.then(() => {
return new Promise(resolve => {
setTimeout(() => {
console.log(item);
resolve();
}, 1000);
});
});
}, Promise.resolve());
}
const arr = [1, 2, 3];
loop(arr);
```
在上面的代码中,我们使用了`reduce`方法来实现每一轮循环都等待上一轮循环结束的效果。在`reduce`的回调函数中,我们使用了`Promise`来等待上一轮循环结束,然后再执行下一轮循环。最后,我们返回一个`Promise`对象,以便在外部使用`then`方法来处理循环结束后的逻辑。
阅读全文