지돌이의 블로그 입니다!

소스 초반에..

 

import * as uuids from 'uuid';
const promiseMap: Map<string, any> = new Map();
const OrigPromise: PromiseConstructor = global.Promise as PromiseConstructor;
global.Promise = function (func) {
  const stack = new Error().stack;
  return new OrigPromise((resolve, reject) => {
    const uuid = uuids.v4();
    promiseMap.set(uuid, {
      uuid,
      stack
    });
    func(function() {
      promiseMap.delete(uuid);
      resolve.call(null, ...arrayArguments(arguments));
    }, (err) => {
      promiseMap.delete(uuid);
      reject(err);
    });
  });
}
function showPendingPromise() {
  for(let item of promiseMap.entries()) {
    console.log(item[1]);
  }
}
Object.keys(OrigPromise).forEach(v => {
  global.Promise[v] = OrigPromise[v];
});
global.Promise['resolve'] = OrigPromise.resolve;
global.Promise['reject'] = OrigPromise.reject;

참고로 위는 typescript 소스이다.

 

위 내용을 추가한 뒤에 멈춘 Promise를 보고 싶을 때 showPendingPromise()을 호출하면 된다.

 

대충

setTimeout(() => showPendingPromise(), 1000);

이렇게 몇초뒤에 출력해도 되구...

 

그럼 Promise를 생성한 스택프레임을 보여준다.

Comment +0