import { createLogger } from '@gongt/ts-stl-library/debug/create-logger'; import { LOG_LEVEL } from '@gongt/ts-stl-library/debug/levels'; import { createWaiter, IWaitter } from './wait'; const debug = createLogger(LOG_LEVEL.DEBUG, 'wait-app'); const sill = createLogger(LOG_LEVEL.SILLY, 'wait-app'); let appReady = false; let wait: IWaitter; const p: Promise = new Promise((resolve, reject) => { wait = createWaiter(function (err) { appReady = true; return err? reject(err) : resolve(); }); }); export function isAppReady() { return appReady; } export function waitAppStart(): Promise { sill('someone waiting app start.'); return p; } export function backgroundJob(runner: () => Promise) { waitAppStart().then(runner).catch((e) => { setImmediate(() => { throw e; }); }); } setTimeout(() => { wait('empty listen', new Promise((resolve) => { setImmediate(resolve); })); }, 0); export function pushInitList(title: string, p: PromiseLike) { if (appReady) { throw new Error(`try to init "${title}", but app already started.`); } debug('new job: %s', title); wait(title, p); }