这是我从未期望会引发错误的函数:
async function isFolder(path: string): Promise<boolean> {
try {
const stat = await fs.lstat(path);
return stat.isDirectory();
} catch (err) {
return false;
}
}
我可以这样使用它。
if (await isFolder(path)) {
// do something
} else {
// do something else
}
这是我有时希望抛出错误的函数:
export function readSvgFile(path: string): Promise<ReadFileResult> {
return new Promise<ReadFileResult>(async (resolve, reject) => {
try {
let buffer = await fs.readFile(path);
if (path.endsWith("svgz")) {
buffer = await new Promise<Buffer>((resolve, reject) => {
unzip(buffer, (err: Error | null, res: Buffer) => {
if (err) {
reject(err);
}
resolve(res);
});
});
}
const supportedEncoding = analyse(buffer)
.map((match) => match.name)
.find((name) => chartdetToFsEncodings.get(name)) as BufferEncoding;
if (supportedEncoding) {
resolve({
path,
data: buffer.toString(supportedEncoding),
});
}
} catch (err) {
reject(err);
}
});
}
据我所知,未处理的拒绝承诺会引发错误。因此,为了避免这种情况,我需要使用try
/ catch
或then
/ catch
:
尝试{ const data = readSvgFile(path) // 做点什么 } catch(err){ //做其他事情 }
现在我已经知道了这些,因为我已经编写了这些功能。但是从打字稿类型来看,这种区别并没有影响我应该如何使用这些功能的线索
function isFolder(path: string): Promise<boolean>
function readSvgFile(path: string): Promise<ReadFileResult>
当我想获得有关该函数是否可以返回被拒绝的承诺或在签名中引发错误的信息时,我会丢失某些东西吗?
您如何知道如何从第三方库处理这些功能而不必深入研究源代码:如何知道是否需要捕获错误?