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

difftreelog

source

tests/src/substrate/promisify-substrate.ts1.2 KiBsourcehistory
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { ApiPromise } from "@polkadot/api";78type PromiseType<T> = T extends PromiseLike<infer TInner> ? TInner : T;910export default function promisifySubstrate<T extends (...args: any[]) => any>(api: ApiPromise, action: T): (...args: Parameters<T>) => Promise<PromiseType<ReturnType<T>>> {11  return (...args: Parameters<T>) => {12    const promise = new Promise<PromiseType<ReturnType<T>>>((resolve: ((result: PromiseType<ReturnType<T>>) => void) | undefined, reject: ((error: any) => void) | undefined) => {13      const cleanup = () => {14        api.off('disconnected', fail);15        api.off('error', fail);16        resolve = undefined;17        reject = undefined;18      };1920      const success = (r: any) => {21        resolve && resolve(r);22        cleanup();23      };24      const fail = (error: any) => {25        reject && reject(error);26        cleanup();27      };28      29      api.on('disconnected', fail);30      api.on('error', fail);3132      const result = action(...args);33      Promise.resolve(result)34        .then(success, fail);3536    });37    return promise as any;38  };39}