Node.js 未处理的拒绝错误

2024-04-14

我的代码中出现未处理的拒绝错误,但跟踪不会告诉我导致该错误的原因。我认为这是webp.cwebp导致问题的电话。当我运行代码时,我成功转换了图像和日志状态,然后遇到了未处理的拒绝。貌似我没有进入最后两个.then(()阻塞,因为没有控制台消息被记录。

如何正确处理拒绝错误以避免出现此错误?我尝试过插入和删除status in the resolve() and reject()声明,但似乎并没有解决它。

 // Download image file from Google Cloud Storage bucket.
 return file.download({ destination: tempLocalFilename })
  .catch((err) => {
    console.error('Failed to download file.', err);
    return Promise.reject(err);
  })
  .then(() => {
    console.log(`Image ${file.name} has been downloaded to ${tempLocalFilename}.`);

    // Convert PNG to webp using webp-converter.
    return new Promise( (resolve, reject) => {
        webp.cwebp(tempLocalFilename, newLocalFilename, "-q 80", status => {
             console.log(status);

             if (status === '100') {
                 resolve();
             } else {
                 reject(status);
             }
           }
         );
       });
  })
  .then(() => {
    console.log(`Image ${file.name} has been converted.`);

    // Upload the converted image back into the bucket.
    return file.bucket.upload(newLocalFilename, { destination: file.name })
      .catch((err) => {
        console.error('Failed to upload converted image.', err);
        return Promise.reject(err);
      });
  })
  .then(() => {
    console.log(`Converted image has been uploaded to ${file.name}`);

    // Delete the temporary file.
    return new Promise((resolve, reject) => {
      fs.unlink(tempLocalFilename, (err) => {
        if (err) {
          reject(err);
        } else {
          resolve();
        }
      });
    });
  });

Q:我收到未处理的拒绝错误,如何正确处理拒绝错误?

A:就像评论已经说过的那样,.catch(...)将阻止你的异常冒泡成为unhandled rejection error.

或者,您也可以为每个插入拒绝处理程序函数.then(...)条款。也就是说,对于每个.then()它应该有两个函数,一个用于快乐路径,另一个用于糟糕路径。

E.g.

  return new Promise( (resolve, reject) => {
        webp.cwebp(tempLocalFilename, newLocalFilename, "-q 80", status => {
             ...
           }
         );
       });
  })
  .then(/*happy path=*/() => {
    console.log(`Image ${file.name} has been converted.`);

    // Upload the converted image back into the bucket.
    return file.bucket.upload(newLocalFilename, { destination: file.name })
      .catch((err) => {
        console.error('Failed to upload converted image.', err);
        return Promise.reject(err);
      });
  },
  /*unhappy path=*/ (error) => { 
      console.log("oops something went wrong during uploading"); 
  })
  /*catch all rejection=*/
  .catch(error => {
       console.log("something bad happened somewhere, rollback!");
   });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 未处理的拒绝错误 的相关文章