独书先生 Menu

callback Promise async 对比

需求

用最简单的示例,对比callback/Promise/async之间的演进对比,理解了callback和Promise的用法,更能体会async的方便之处,且现在推荐都使用async或者Promise和async混合使用

代码

//callback
function callbackFunc(x, callback) {
  f1(x, (err1, result1) => {
    if (err1) {
      console.error(err1);
      callback(err1);
      return;
    }
    f2(result1, (err2, result2) => {
      if (err2) {
        console.error(err2);
        callback(err2);
        return;
      }
      console.log(result2);
      callback(null, result2);
    });
  });
}

//Promise
function promiseFunc(x) {
  return f1(x)
    .then(result1 => {
      return f2(result1);
    })
    .then(result2 => {
      console.log(result2);
      return result2;
    })
    .catch(err => {
      console.error(err);
      throw err;
    });
}

//async
async function asyncFunc(x) {
  try {
    const result1 = await f1(x);
    const result2 = await f2(result1);
    console.log(result2);
    return result2;
  } catch (err) {
    console.error(err);
    throw err;
  }
}