发现Nodejs的承诺

时间:2018-05-19 09:21:45

标签: javascript node.js node-modules

我想知道是否有办法轻易找出我使用返回承诺的方法。因为我使用了很多库,并且不想对每个库进行筛选,以确定我是否可以.then()或.catch()或将我的方法放在try-catch块中。

我现在已经知道了:

  

(node:23423)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误源于在没有catch块的情况下抛出异步函数或拒绝未使用.catch()处理的promise。 (拒绝ID:5)

每次发生此错误时,堆栈跟踪都不会指向我的文件中发生错误的行,让我不知道我未正确处理此错误的位置。为此,我将浏览所有脚本,但我想知道最有效的方法是什么。

2 个答案:

答案 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%肯定它。