Thenable<T> 一个 Promise-like 对象

8 min read

Thenable是指一个类或对象,它具有类似Promise的特性,可以用于在异步操作完成后执行回调函数。

Promise是一种用于处理异步操作的对象,它可以让我们更方便地进行错误处理和操作链的构建。通常,Promise的构造函数接收一个执行器函数作为参数,这个函数里通常包含一个异步操作。然后,可以通过调用Promise的.then()方法来注册在操作完成后执行的回调函数。

类似地,一个Thenable对象也有类似的功能,可以在异步操作完成后执行回调函数。它可能不是一个真正的Promise对象,但是可以通过.then()方法来注册回调函数。

例如,我们可以使用一个Thenable对象来模拟一个异步的延时操作:

class DelayedPromise<T> implements Thenable<T> {
  private value: T;
  private delay: number;
  
  constructor(value: T, delay: number) {
    this.value = value;
    this.delay = delay;
  }
  
  then<R>(onfulfilled?: (value: T) => R | Thenable<R>): Thenable<R> {
    return new DelayedPromise<R>(onfulfilled(this.value), this.delay);
  }
  
  catch(onrejected?: (reason: any) => void | Thenable<void>): Thenable<void> {
    return this;
  }
}

function delay<T>(value: T, delay: number): Thenable<T> {
  return new DelayedPromise<T>(value, delay);
}

delay("Hello", 1000).then((value: string) => {
  console.log(value);
  return delay("World", 2000);
}).then((value: string) => {
  console.log(value);
});

在上面的例子中,我们通过定义了一个DelayedPromise<T>类来实现一个Thenable对象。它具有.then()方法来注册回调函数,并返回一个新的延时Promise对象,以便继续链式调用。

Thenable可以用于在某些情况下作为Promise的替代品或兼容对象,以及与Promise一起使用。