我正在寻找一个关于在我的nodeJS应用程序中使用什么的答案。
我有处理对mssql的通用dB访问的代码。这段代码是使用async函数编写的,然后我使用了一个承诺来调用该函数,所有这些都很好。
随着我的应用程序越来越大,代码也越来越多,我计划将一些逻辑转换成函数,然后调用它们。
因此,我的问题是:是否存在使用异步/等待和许诺混合使用的缺点,或者这真的不重要?
异步/等待使编写更易读的代码变得更容易,因为在返回某些内容之前,我必须先读写多个db,并且需要其中一些结果。
所以问题是什么是更好的方法?异步/等待在已设置的dB层上,不能更改逻辑层异步/等待,这将允许我进行异步/等待函数调用,或者如果我对逻辑有承诺,那么在函数调用上就会被允诺所困。
因此,我希望有人能给我更多的洞察力,如果其中一个比另一个有更多的优势,除了能够写更干净的代码。
发布于 2018-10-30 04:13:25
实际上,这取决于您的节点版本,但是如果您可以使用async/await,那么您的代码将更容易阅读和维护。当您将函数定义为‘异步’时,它将返回一个本机Promise,当您使用“等待”调用它时,它将执行Promise.then。
注意:将等待调用放在try/catch中,因为如果承诺失败,它会发出'catch',可以在catch块中处理。
try{
let res1 = await your-async-function(parameters);
let res2 = await your-promise-function(parameters);
await your-async-or-promise-function(parameters);
}
catch(ex){
// your error handler goes here
// error is caused by any of your called functions which fails its promise
// this methods breaks your call chain
}你也可以像这样处理你的“捕获”:
let result = await your-asyncFunction(parameters).catch((error)=>{//your error handler goes here});上述方法不会产生异常,因此执行将继续进行。
除了本机承诺模块实现之外,我认为async/await之间没有任何性能差异。
我建议使用bluebird模块,而不是内置到节点中的本地承诺。
https://stackoverflow.com/questions/53057110
复制相似问题