javascript - 无法处理 promise 内的错误

标签 javascript

我有一个函数,它采用路径并获取有关它的一些信息(使用 node.js 功能)

代码

import fs from 'fs'
import fse from 'fs-extra'
import { join } from 'path'


/**
 * Take in file path and return contents with stat
 * @param  {String} path
 * @return {Array}
 */
export default path => {
  return readdir(path).then(files => {
    const statsPromises = files.map((file, i) => {
      const p = join(path, file)
      return stat(p).then(stat =>
        ({
          // THIS ONE LINE BELOW THROWS UN-HANDLED ERRORS FOR SOME PATHS
          // Error: EPERM: operation not permitted, scandir
          folderItemsCount: stat.isDirectory() ? fs.readdirSync(p).length : null,
          name: file,
          path: p,
          stat
        })
      , err => console.log("Path access error ", err))
    })
    return Promise.all(statsPromises)
  }).then(contents =>
    contents.filter(Boolean)
  )
}


// ============== HELPER FUNCTIONS ==============
/**
 * Get Array for path contents. Checks if path exists
 * @param  {String} path
 * @return {Promise}
 */
export function readdir (path) {
  return pathExists(path)
    ? fse.readdir(path)
    : Promise.reject(new Error('Path does not exist'))
}

/**
 * Alias of fse.existsSync
 * @param  {String} path
 * @return {Boolean}
 */
export function pathExists (path) {
  return fse.existsSync(path)
}

/**
 * Get path stat
 * @param  {String} path
 * @return {Promise}
 */
export function stat (path) {  
  return fse.stat(path)
}

问题

我不知道如何处理以下行的错误:

folderItemsCount: stat.isDirectory() ? fs.readdirSync(p).length : null

我想要它:

  • 如果可以访问文件夹,则返回多个项目(当它检查可访问的目录时,这确实有效)

  • 如果无法访问文件夹,则返回字符串“未知”(或 null),而不是抛出未处理的错误:错误:EPERM:不允许操作,scandir

下面的行处理 stat() 但不处理 scandir()

, err => console.log("Path access error ", err))

最佳答案

无需深入研究代码, promise 要么解决,要么拒绝,您的处理程序要么点击“then”,要么点击“catch”。我发现您正在使用 .then,但没有使用 .catch。另请记住,如果该列表中的任何 Promise 被拒绝,则 Promise.all 将拒绝,因此您在那里有一个全有或全无的 Promise。

关于javascript - 无法处理 promise 内的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51117847/

相关文章:

javascript - facebook 聊天框持久化

javascript - JS 获取元素 html 和小写/连字符并作为类添加到父级

JavaScript 淡入淡出数字也使我的图像居中

javascript - 在代码所在的位置添加新元素,而不是在另一个元素之后

javascript - 如何使用 `arrive.js` 查找到达 `iFrame' 内部的元素

javascript - D3.js:使用 origin() 函数按组中包含的元素拖动组 ('g' 中的所有内容

javascript - 如何向 javascript 类添加回调函数?

javascript - 在父状态更改后 react 子组件不重新渲染

javascript - 为什么这个函数不停止它的父函数?

javascript - 在 JavaScript 中将换行符分隔为逗号分隔