📜  承诺与可观察 - Javascript (1)

📅  最后修改于: 2023-12-03 15:10:06.304000             🧑  作者: Mango

承诺与可观察 - Javascript

Javascript中的承诺(Promise)和可观察(Observable)都是异步编程的重要概念。它们可以用于处理需要时间来完成的操作,如从服务端获取数据或者操作DOM。

承诺(Promise)

承诺是表示某个操作将来会完成的对象。它有三种状态:

  • pending:操作正在进行中
  • resolved:操作已经成功完成
  • rejected:操作发生了错误

下面是一个简单的Promise的例子:

const promise = new Promise((resolve, reject) => {
  // 进行一些异步操作
  setTimeout(() => {
    const randomNum = Math.random();
    if (randomNum > 0.5) {
      // 操作成功
      resolve(randomNum);
    } else {
      // 操作失败
      reject(Error("操作失败"));
    }
  }, 1000);
});

promise.then(result => {
  console.log(`操作成功,结果为${result}`);
}).catch(error => {
  console.log(`操作失败,原因为${error.message}`);
});

在这个例子中,我们创建了一个Promise对象,它在1秒后会返回一个随机数。如果随机数大于0.5,则表示操作已经成功完成,我们调用resolve方法并将随机数作为参数传入。如果随机数小于等于0.5,则表示操作失败,我们调用reject方法并传入一个Error对象表示失败原因。

我们通过.then方法来监听承诺的成功状态,通过.catch方法来监听承诺的失败状态。在监听到对应状态后,我们就可以进行对应的操作。

可观察(Observable)

可观察是用于处理异步编程的另一种方式。它可以用于处理需要实时更新的数据流,例如从服务器接收实时数据。

下面是一个简单的Observable的例子:

const observable = new Observable(observer => {
  // 进行一些异步操作
  setInterval(() => {
    const randomNum = Math.random();
    observer.next(randomNum);
  }, 1000);
});

observable.subscribe({
  next: result => {
    console.log(`接收到新数据,数据为${result}`);
  },
  error: error => {
    console.log(`发生了错误,原因为${error.message}`);
  },
  complete: () => {
    console.log("数据流结束");
  }
});

在这个例子中,我们创建了一个Observable对象,它会每隔1秒返回一个随机数。我们可以通过.subscribe方法来监听Observable返回的数据流。

subscribe方法中,我们传入一个对象,包括了三个方法:nexterrorcompletenext方法会在每次接收到新的数据时被调用,它的参数是接收到的数据。error方法会在发生错误时被调用,并传入一个Error对象表示错误原因。complete方法会在数据流结束时被调用。

总结

承诺和可观察都是处理异步编程的重要工具。它们的使用可以使异步编程更加简单和易于维护。在使用它们时需要注意,需要确保在正确的时间处理承诺和可观察返回的结果。