我意识到这可能是主观的,但是在遍历“数组”时遇到了问题。
[当“数组”是一个以上的元素时...实际上是一个数组,因此我的for...of
和array.forEach
正常工作。
但是如果函数仅接收一项,则它不是数组,它只是一个对象,因此会遇到问题。
我通过将它包装在if语句中解决了这个问题,但是每次我遍历实际上可能是单个对象而不是对象数组的东西时,这样做似乎都是疯狂的。
async function writeToDB(myArray: []) {
const db = await openDB("DomainsDB", 1);
const tx = db.transaction("Domains", "readwrite");
if (myArray.length > 1) {
myArray.forEach(async(r: any) => {
await tx.store.add(r["SearchHeader"]);
});
} else {
await tx.store.add(myArray["SearchHeader"]);
}
await tx.done;
}
由于myArray
类型是一个数组,所以TypeScript应该阻止您分配单个项目。如果您使用不支持类型的Javascript,或者使用了在构建时删除键入内容的babble插件,则可能会发生这种情况(在这种情况下,IDE会警告您)。
JS中此问题的可能解决方案:
您可以将myArray
连接到一个空数组。如果myArray
是数组或单个项目,则结果将始终是数组:
async function writeToDB(myArray: []) {
const db = await openDB("DomainsDB", 1);
const tx = db.transaction("Domains", "readwrite");
const arr = [].concat(myArray); // the result is always an array
arr.forEach(async(r: any) => {
await tx.store.add(r["SearchHeader"]);
});
await tx.done;
}
另一个选择是将myArray
分配给另一个数组,并使用Array.flat()
:
async function writeToDB(myArray: []) {
const db = await openDB("DomainsDB", 1);
const tx = db.transaction("Domains", "readwrite");
const arr = [myArray].flat(); // the result is always an array
arr.forEach(async(r: any) => {
await tx.store.add(r["SearchHeader"]);
});
await tx.done;
}