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一起使用。