不对这样做报错了Uncaught (in promise) TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator)),帮我修复,并让程序执行两次打印
时间: 2024-11-17 21:29:03 浏览: 68
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#Object‘的解决方法
看来你在尝试迭代一个非可迭代的对象,比如可能是基本类型的值而不是数组或其他可迭代的数据结构。为了解决这个问题,你需要确保传递给 `asyncCall` 的参数是一个可迭代的数组。以下是修改后的代码,将检查是否为数组,以及修复 `asyncCall` 的内部逻辑以确保最多执行两次打印:
```javascript
function asyncCall(iterable, index = 0, currentRound = 1) {
if (!Array.isArray(iterable)) { // 检查是否为数组
throw new Error("传入的参数不是数组");
}
if (currentRound > 2 || index >= iterable.length) {
return Promise.resolve(); // 如果已超过两次或数组结束,直接返回
}
const element = iterable[index];
return new Promise((resolve) => {
setTimeout(() => {
console.log('处理 element: ' + element);
asyncCall(iterable, index + 1, currentRound + 1).catch(() => {
if (index < iterable.length - 1) {
asyncCall(iterable, index + 1, currentRound); // 如果有剩余元素,回到上一层进行第二次尝试
} else {
resolve();
}
});
}, 1000);
});
}
// 使用数组调用函数
const arr = [1, 2, 3]; // 替换为你的实际数据
async function recursiveCall() {
try {
await asyncCall(arr, 0, 1);
} catch (error) {
console.error(error.message); // 输出错误信息
}
}
recursiveCall();
```
现在,如果传入的是一个数组,`asyncCall` 将会正常工作并在最多两次打印后停止。如果你传入的不是一个数组,就会抛出错误。
阅读全文