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) :
Error: EPERM: operation not permitted, scandir
下面的行处理stat()
但不是scandir()
, err => console.log("Path access error ", err))
解决方案
无需深入研究您的代码,promise 要么解决要么拒绝,您的处理程序要么点击“then”或“catch”。我看到您使用的是 .then,但不是 .catch。还要记住,如果该列表中的任何承诺被拒绝,Promise.all 将拒绝,所以你在那里有一个全有或全无的承诺。
推荐阅读
- typescript - 如何在 next.js 中使用 sass
- css - 如何选择 ::after 元素?
- python - 合并两个表
- python - 在Python中获取数组中对象的世界位置
- sequelize.js - 续集类型错误:“值”参数超出范围
- dataframe - 如何通过管道将 spark rdd 传输到 python 并从 python 返回 rdd
- python - 测试。测试参数化不起作用
- python-3.x - fit_generator 中的日志验证步骤
- azure - 如何在 microsoft face api 中增加每秒事务限制?
- dvc - dvc gc 和远程缓存中的文件