TypeScript中ipfs.add结合globSource使用报asyncIterator错误如何解决?
问题根因
两个核心错误触发原因:
- 你调用的
ipfs.add()方法返回的是单个Promise<AddResult>,本身不是异步可迭代对象,不能直接放在for await...of里遍历 - 当前IPFS类型定义下,
globSource返回的异步生成器类型,和ipfs.add要求的单个导入候选ImportCandidate类型不匹配,ipfs.add只能接收单个文件/内容,不能直接接收批量的目录遍历结果
修复方案
按优先级选以下任意一种即可:
方案1:改用ipfs.addAll方法(最推荐)
ipfs.addAll是专门用来处理批量导入的API,支持直接传入globSource的返回值,且本身返回异步迭代器,适配for await...of遍历:
for await (const entry of ipfs.addAll( globSource(dirPath, { recursive: true, ignore }), )) { // 原有处理entry的逻辑不变 }
方案2:如果必须用ipfs.add,先遍历globSource逐个导入
如果你的IPFS版本没有addAll方法,就先遍历globSource的每一项,单独调用ipfs.add:
for await (const candidate of globSource(dirPath, { recursive: true, ignore })) { const entry = await ipfs.add(candidate) // 原有处理entry的逻辑不变 }
补充类型兼容修复(如果改完方法还有类型报错)
如果调整方法后还是有类型不匹配提示,给globSource的返回值加个显式类型断言即可:
import type { ImportCandidate } from 'ipfs-core-types/src/utils' for await (const entry of ipfs.addAll( globSource(dirPath, { recursive: true, ignore }) as AsyncIterable<ImportCandidate>, )) { // 处理逻辑 }
内容的提问来源于stack exchange,提问作者Nika Kurashvili
相关产品推荐
相关产品推荐

