返回

异步编程的演变:从概念到callback再到promise

前端

异步编程的概念

异步编程是指一种允许程序在等待I/O操作或其他耗时操作完成时,继续执行其他任务的编程范式。

这种异步编程模型的主要目的是为了提高应用程序的性能和响应速度,因为传统的同步编程模型要求程序在等待I/O操作完成之前,必须阻塞其他任务的执行。

callback回调函数

callback回调函数是一种在异步操作完成后执行的函数。

当一个异步操作被触发时,程序会将一个callback函数作为参数传递给这个异步操作,当这个异步操作完成后,这个callback函数就会被调用。

// 模拟一个异步操作
function asyncOperation(callback) {
  setTimeout(() => {
    // 模拟异步操作耗时
    console.log('异步操作完成');
    // 调用callback函数
    callback();
  }, 1000);
}

// 定义一个callback函数
function callbackFunction() {
  console.log('回调函数被调用');
}

// 调用异步操作,并传入callback函数
asyncOperation(callbackFunction);

在上面的例子中,asyncOperation函数是一个模拟的异步操作,它会在1秒后调用callbackFunction函数。

promise

promise是一种用来处理异步操作的更现代的方式。

promise对象代表一个异步操作的结果,它有三种状态:

  • pending(等待):promise对象还没有完成。
  • fulfilled(已完成):promise对象已经完成,并且结果是成功的。
  • rejected(已拒绝):promise对象已经完成,但结果是失败的。
// 模拟一个异步操作
function asyncOperation() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // 模拟异步操作耗时
      console.log('异步操作完成');
      // 根据操作结果调用resolve或reject
      resolve('异步操作成功');
    }, 1000);
  });
}

// 使用promise处理异步操作
asyncOperation()
  .then((result) => {
    console.log('promise成功,结果是:', result);
  })
  .catch((error) => {
    console.log('promise失败,错误是:', error);
  });

在上面的例子中,asyncOperation函数是一个模拟的异步操作,它会在1秒后返回一个promise对象。

然后,我们使用.then()方法来处理promise对象,当promise对象完成时,.then()方法中的函数就会被调用。

如果promise对象的状态是fulfilled,那么.then()方法中的函数就会被调用,并且第一个参数是promise对象的结果。

如果promise对象的状态是rejected,那么.catch()方法中的函数就会被调用,并且第一个参数是promise对象的原因。

总结

异步编程是一种提高应用程序性能和响应速度的编程范式。

callback回调函数和promise都是用来处理异步操作的两种技术,它们各有优缺点。

在现代JavaScript和Node.js中,promise已经成为处理异步操作的更主流的方式。