فهرست منبع

Add util for handling promise cancelation to avoid setting state on unmounted components

https://github.com/facebook/react/issues/5465
Dominik Prokop 7 سال پیش
والد
کامیت
db17262ea4
1فایلهای تغییر یافته به همراه22 افزوده شده و 0 حذف شده
  1. 22 0
      public/app/core/utils/CancelablePromise.ts

+ 22 - 0
public/app/core/utils/CancelablePromise.ts

@@ -0,0 +1,22 @@
+// https://github.com/facebook/react/issues/5465
+
+export interface CancelablePromise<T> {
+  promise: Promise<T>;
+  cancel: () => void;
+}
+
+export const makePromiseCancelable = <T>(promise: Promise<T>): CancelablePromise<T> => {
+  let hasCanceled_ = false;
+
+  const wrappedPromise = new Promise<T>((resolve, reject) => {
+    promise.then(val => (hasCanceled_ ? reject({ isCanceled: true }) : resolve(val)));
+    promise.catch(error => (hasCanceled_ ? reject({ isCanceled: true }) : reject(error)));
+  });
+
+  return {
+    promise: wrappedPromise,
+    cancel() {
+      hasCanceled_ = true;
+    },
+  };
+};