问题描述
await 包装Promise.all() await 并没有实现响应的效果
问题出现的环境背景及自己尝试过哪些方法
实现一个查看文件夹下面的所有文件夹名称列表的函数,用了async/await 去包装Promise.all 返回最后的结果,打印函数的返回值是Promise{<pending>} ,感觉await 并没有生效
相关代码
const fs = require('fs')
const path = require('path')
const { promisify } = require('util')
const readDir = promisify(fs.readdir)
const stat = promisify(fs.stat)
/**
* 获取文件夹目录
* @param {*} pathVal
*/
async function getDirList(pathVal) {
const param = path.resolve(__dirname, pathVal)
const isDir = await stat(param)
// 当前目录不是文件夹返回 false
if (!isDir.isDirectory()) return false
const dir = await readDir(param)
const list = []
dir.forEach(name => {
const pt = path.join(param, name)
list.push(stat(pt))
})
const dirList = []
const data = await Promise.all(list)
data.forEach((state, index) => {
state.isDirectory() ? dirList.push(dir[index]) : null
})
return dirList
}
let resualt= getDirList('../../directory')
console.log('......')
console.log(resualt)
你期待的结果是什么?实际看到的错误信息又是什么?
期待结果:
......
['directoryName1','directoryName2']
实际看到的错误信息:
......
Promise{<pending>}
let resualt= getDirList('../../directory')
的时候,getDirList()这是一个异步的方法啊,你用同步的方式去调用,肯定会出现Promise{<pending>}。多写几次回调的方式,对理解promise/async 会有帮助的。