我想知道是否有办法轻易找出我使用返回承诺的方法。因为我使用了很多库,并且不想对每个库进行筛选,以确定我是否可以.then()或.catch()或将我的方法放在try-catch块中。
我现在已经知道了:
(node:23423)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误源于在没有catch块的情况下抛出异步函数或拒绝未使用.catch()处理的promise。 (拒绝ID:5)
每次发生此错误时,堆栈跟踪都不会指向我的文件中发生错误的行,让我不知道我未正确处理此错误的位置。为此,我将浏览所有脚本,但我想知道最有效的方法是什么。
答案 0 :(得分:2)
在这种情况下,Nodejs会发出unhandledRejection。
await
通过倾听此事件,您可以确定此Promise的创建位置以及缺少.then
或.catch
/ then
的部分。
编码时,您需要始终确定API /库是否使用Promises,如果它是同步或基于事件的回调。每个库应该与此保持一致,或者至少通过命名函数使其清楚。如果图书馆不清楚,你应该考虑不使用它。
没有自动的方法来确定缺少try
或 string pathToVideoFile = "D:\\Projects\\Project\\Db_Script\\TAR_Dummy\\TAR_Dummy\\Videos\\"+postedFile.FileName;
string imagePath = "D:\\Watermarks\\30.png";
string Id = Guid.NewGuid().ToString();
//Convert videos from one format to another
ffMpeg.ConvertMedia(pathToVideoFile, "D:\\Watermarks\\"+Id+".flv", Format.flv);
//Add Aatermark to videos
ffMpeg.Invoke("-i "+pathToVideoFile+ " -i "+ imagePath + " -filter_complex \"overlay=10:10\" D:\\Watermarks\\Images\\" + Id+".mp4");
//Get video thumbnail
ffMpeg.GetVideoThumbnail(pathToVideoFile, "D:\\Watermarks\\Images\\" + Id.Substring(Id.Length-5)+".jpg");
catch块的位置。最小化问题的方法是创建单元测试并在项目中达到100%的代码覆盖率。
答案 1 :(得分:1)
一般情况下,没有解决方案 - 你需要知道你自己的代码正在调用和处理它的函数。与你必须做的事情一样。
哟可能会通过unhandledRejection
方法了解哪些代码会导致问题,但您永远不会100%肯定它。