git.delta.rocks / unique-network / refs/commits / 7bcde70a2ca7

difftreelog

source

tests/src/substrate/promisify-substrate.ts1.1 KiBsourcehistory
1import ApiPromise from "@polkadot/api/promise/Api";23type PromiseType<T> = T extends PromiseLike<infer TInner> ? TInner : T;45export default function promisifySubstrate<T extends (...args: any[]) => any>(api: ApiPromise, action: T): (...args: Parameters<T>) => Promise<PromiseType<ReturnType<T>>> {6  return (...args: Parameters<T>) => {7    const promise = new Promise<PromiseType<ReturnType<T>>>((resolve: ((result: PromiseType<ReturnType<T>>) => void) | undefined, reject: ((error: any) => void) | undefined) => {8      const cleanup = () => {9        api.off('disconnected', fail);10        api.off('error', fail);11        resolve = undefined;12        reject = undefined;13      };1415      const success = (r: any) => {16        resolve && resolve(r);17        cleanup();18      };19      const fail = (error: any) => {20        reject && reject(error);21        cleanup();22      };23      24      api.on('disconnected', fail);25      api.on('error', fail);2627      const result = action(...args);28      Promise.resolve(result)29        .then(success, fail);3031    });32    return promise as any;33  };34}