git.delta.rocks / unique-network / refs/commits / fa2ebd30e96a

difftreelog

source

tests/src/substrate/promisify-substrate.ts918 Bsourcehistory
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, reject) => {8      const cleanup = () => {9        api.off('disconnected', fail);10        api.off('error', fail);11      };1213      const success = (r: any) => {14        cleanup();15        resolve(r);16      };17      const fail = (error: any) => {18        cleanup();19        reject(error);20      };21      22      api.on('disconnected', fail);23      api.on('error', fail);2425      const result = action(...args);26      Promise.resolve(result)27        .then(success, fail);2829    });30    return promise as any;31  };32}