我在promise中有这段代码:
try { const newFile = fs.createWriteStream(filePath); response.pipe(newFile); newFile.on('finish', () => { newFile.close(resolve()); }); } catch (err) { reject(err); }
response 结果是 get 方法在 http 模块,以及 filePath 是一个字符串 /a/b/c/file.mp3/ 文件夹在哪里 /a/b/c 不存在。
response
get
http
filePath
/a/b/c/file.mp3/
/a/b/c
执行此片段后的下一行,而不是捕获错误,然后崩溃为:
足够:没有这样的文件或目录,请在WriteStream.onerror打开“/a/b/c/file.mp3”。。。在WriteStream.emit上。。。在lazyFs.open。。。在FSReqWrap.未完成
它为什么这样做?
如果满足以下条件,代码可以正常工作 filePath 是有效路径。
WritableStream 是异步的,您无法使用以下命令捕获其错误 try...catch 你应该听听 error 活动。
WritableStream
try...catch
error
const newFile = fs.createWriteStream(filePath); response.pipe(newFile); newFile.on('finish', () => { newFile.close(resolve()); }); newFile.on('error', reject);
或者更直白地说
newFile.on('error', exception => { reject(exception); });