Javascript 嵌套在函数中的异步函数

Javascript 嵌套在函数中的异步函数,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)

我正在使用一个框架,在这个框架中我发现了如下代码:

区块1

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>调用它,速度会有所提高,那么这将是可以忽略的。我认为,不在代码中到处乱扔回调参数是一个好方法。此外,如果函数名表明它们正在启动某个东西,调用方可以确定它正在返回一个承诺,并自行准备。