嵌套在函数中的异步函数

async function nested inside a function

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

块1

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

因为 asyncFunction 来自已弃用的 npm package 我会借此机会重构它。 我想换成这样:

块2

fun_1(params).then(callback)

其中 fun_1 将是:

fun_1(params) {
    fun_2(params) {
          return asyncFunc()     ???
  }
}   

第二个模式是否正确且优于第一个模式?

看来是对的。但是,所有函数在调用内部函数时都需要 return 承诺。例如:

fun_1(params) {
  fun_2(params) {
    return asyncFunc();
  }

  return fun_2(params);
} 

fun_1(params).then(callback);

你的问题信息不多,但我会尽力回答。

为了 fun_1 能够与 .then 链接,它需要 return 一个承诺:

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
}

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