关于async/await 与Promise.all() 一起用的问题 ,await好像失灵了一样

发布于 2022-09-11 21:03:30 字数 1210 浏览 13 评论 0

问题描述

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>}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乞讨 2022-09-18 21:03:30
  • 和你之前的async/promise没关系。你在调用let resualt= getDirList('../../directory')的时候,getDirList()这是一个异步的方法啊,你用同步的方式去调用,肯定会出现Promise{<pending>}。多写几次回调的方式,对理解promise/async 会有帮助的。
  • 可以尝试一下下面这种方式

(async()=>{
    let resualt=await getDirList('../../directory')
    console.log('......')
    console.log(resualt)
})();
  • 下次把代码排版调一下哈,这个排版你看着感觉怎样
山色无中 2022-09-18 21:03:30

async/promise语法:
1:async函数返回的是promise函数
2:await 关键字只能放到async 函数里面
解决办法:把你的getDirList方法包装到另一个function里面用await getDirList()就好了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文