嵌套在函数内的异步函数

问题描述

我正在使用一个框架,在其中找到了这样的代码

block1

fun_1(params,callback) { 
        fun_2(params,callback) {
                ...     
                     fun_n(params,callback) {
                          asyncFunction().then(callback).catch(callback)
                                }

由于asyncFunction来自已弃用的npm package,因此我将借此机会对其进行重构。 我想改成这样:

block2

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.then链接起来,它需要返回一个Promise:

function fun_1() {
   return new Promise((resolve,reject) => {
      // Do some tasks and resolve when complete
      resolve(/* some data */)
   }
}

或者,通过使用async关键字,它只是Promise的语法糖:

async function fun_1() {
    await some_async_task()
    return; // does the same as resolve would in Promise
}

为了重构代码,您将不得不在promise中移动异步内容和回调。 如果您想澄清问题中的一些内容以获得更好的答案,请告诉我。