js异步处理的问题?

作者站长头像
站长
· 阅读数 16

先上图片:js异步处理的问题?js异步处理的问题?

由于readEntries函数是异步的且没有返回值,所以async-await的方式就行不通了后面又想过用事件总线的方式弄但鄙人没法确定触发事件的时机,就pass了。

后面想通过promise.all的方式(promiseAll数组是异步往里追加实例的)但又出了别的问题,在图片中的109行输出是对的但是到了then的回调函数里面输出的就是空数组不知道怎么回事了。如果您有别的方式或者对此问题有解决思路烦请赐教,拜托了!

回复
1个回答
avatar
test
2024-07-16

console.log是快照,在你点开查看的时候会实时获取最新的值,所以你所看到的输出只是在你点开的一刻是有值的,在打印的时候是没值的,你可以console.log(...promiseAll)看下

根据你的需求可以像下面改一下,没有测试,你自己测一下

const getAllFileEntry = items => {
    const handle = list => {
        const promiseAll = list.map(entry => entry.isDirectory ? fn(entry) : getFileEntry(entry))
        return Promise.all(promiseAll)
    }
    const fn = fileSystemEntry => {
        const reader = fileSystemEntry.creatReader()
        return new Promise(res => {
            reader.readEntries(result => {
                res(handle(result))
            })
        })
        
    }
    return handle(items)
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容