AbortablePromise.ts 1.0 KB

12345678910111213141516171819202122232425262728
  1. export class AbortablePromise<T> {
  2. promise: Promise<T>
  3. private _reject: ((res?: any) => void) | null = null
  4. constructor(executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void) {
  5. this.promise = new Promise<T>((resolve, reject) => {
  6. executor(resolve, reject)
  7. this._reject = reject // 保存reject方法的引用,以便在abort时调用
  8. })
  9. }
  10. // 提供abort方法来中止Promise
  11. abort(error?: any) {
  12. if (this._reject) {
  13. this._reject(error) // 调用reject方法来中止Promise
  14. }
  15. }
  16. then<TResult1 = T, TResult2 = never>(
  17. onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
  18. onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null
  19. ): Promise<TResult1 | TResult2> {
  20. return this.promise.then(onfulfilled, onrejected)
  21. }
  22. catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult> {
  23. return this.promise.catch(onrejected)
  24. }
  25. }