Javascript 嵌套在函数中的异步函数
我正在使用一个框架,在这个框架中我发现了如下代码: 区块1Javascript 嵌套在函数中的异步函数,javascript,asynchronous,promise,callback,nested-function,Javascript,Asynchronous,Promise,Callback,Nested Function,我正在使用一个框架,在这个框架中我发现了如下代码: 区块1 fun_1(params, callback) { fun_2(params, callback) { ... fun_n(params, callback) { asyncFunction().then(callback).catch(callback)
fun_1(params, callback) {
fun_2(params, callback) {
...
fun_n(params, callback) {
asyncFunction().then(callback).catch(callback)
}
由于asyncFunction
来自一个弃用的npm包
,我想借此机会对其进行重构。
我想换成这样:
区块2
fun_1(params).then(callback)
其中fun_1
将是:
fun_1(params) {
fun_2(params) {
return asyncFunc() ???
}
}
第二种模式正确且优于第一种模式吗?似乎正确。但是,所有函数在调用内部函数时都需要返回该承诺。例如:
fun_1(params) {
fun_2(params) {
return asyncFunc();
}
return fun_2(params);
}
fun_1(params).then(callback);
你的问题没有太多信息,但我会尽量用我所掌握的来回答 为了使
fun_1
能够链接到。然后
,它需要返回一个承诺:
函数fun_1(){
返回新承诺((解决、拒绝)=>{
//完成一些任务并解决问题
解析(/*某些数据*/)
}
}
或者,通过使用async
关键字,这只是承诺的语法糖:
async function fun_1() {
await some_async_task()
return; // does the same as resolve would in Promise
}
为了重构代码,您必须在Promissions中移动异步内容和回调。
如果您想澄清问题中的一些问题以获得更好的答案,请告诉我。这是在前端还是在节点中?我只是在学习异步函数,但您不应该使用Promisse?例如
返回新Promisse(resolve=>{…
这是在节点上的
@CertainPerformance,我想asyncFunction会返回一个承诺yes@LuísHNrique当您使用异步时,您应该停止直接处理承诺或创建丑陋的代码。异步是隐藏承诺的抽象。这不是语法上有效的代码,因此我们不确定您在这里处理的是什么。一般来说,你可能想跟随我的.Hi@Jacob,谢谢。fun\u 1
调用其他函数后,一个asyncFunction
。asyncFunction
是否已经返回了一个promise
?我想知道的是我是否应该从fun\u 1
返回一些promise
如果block2是最佳实践,我不知道在哪里调用fun_2。fun_1应该返回fun_2的结果吗?如果asyncFunction返回一个承诺,你可以直接返回它。谢谢@Gazihan Alankus!block2是最佳实践还是block1有任何优点。block1会使代码的可读性降低吗s为了知道会发生什么,我无法读取线性代码,但需要打开所有嵌套函数的代码(有时分散在一些不同的文件中)。它是否加快了从fun\n
返回到fun\u 1
在fun\n
中调用立即回调的速度?如果在从fun\n
返回之前从fun\n>调用它,速度会有所提高,那么这将是可以忽略的。我认为,不在代码中到处乱扔回调参数是一个好方法。此外,如果函数名表明它们正在启动某个东西,调用方可以确定它正在返回一个承诺,并自行准备。