代码之家  ›  专栏  ›  技术社区  ›  Old Geezer

Try块未捕获文件系统错误

  •  0
  • Old Geezer  · 技术社区  · 6 年前

    我在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 不存在。

    执行此片段后的下一行,而不是捕获错误,然后崩溃为:

    足够:没有这样的文件或目录,请在WriteStream.onerror打开“/a/b/c/file.mp3”。。。在WriteStream.emit上。。。在lazyFs.open。。。在FSReqWrap.未完成

    它为什么这样做?

    如果满足以下条件,代码可以正常工作 filePath 是有效路径。

    0 回复  |  直到 6 年前
        1
  •  4
  •   Amadan    6 年前

    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);
    });
    
    推荐文章