js异步处理的问题?

先上图片:
78146e1b2f728339222a25ca1d85caa.jpg
image.png

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

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

阅读 1.3k
1 个回答

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)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题