1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-12 02:27:46 -05:00
denoland-deno/js/promise_util.ts

51 lines
1.4 KiB
TypeScript
Raw Normal View History

2018-10-19 15:25:29 -04:00
// Copyright 2018 the Deno authors. All rights reserved. MIT license.
2018-10-12 14:22:52 -04:00
import { PromiseRejectEvent } from "./libdeno";
/* tslint:disable-next-line:no-any */
const rejectMap = new Map<Promise<any>, string>();
// For uncaught promise rejection errors
/* tslint:disable-next-line:no-any */
const otherErrorMap = new Map<Promise<any>, string>();
// For reject after resolve / resolve after resolve errors
export function promiseRejectHandler(
error: Error | string,
event: PromiseRejectEvent,
/* tslint:disable-next-line:no-any */
promise: Promise<any>
) {
switch (event) {
case "RejectWithNoHandler":
rejectMap.set(promise, (error as Error).stack || "RejectWithNoHandler");
break;
case "HandlerAddedAfterReject":
rejectMap.delete(promise);
break;
case "ResolveAfterResolved":
// Should not warn. See #1272
break;
2018-10-12 14:22:52 -04:00
default:
// error is string here
otherErrorMap.set(promise, `Promise warning: ${error as string}`);
}
}
// Return true when continue, false to die on uncaught promise reject
export function promiseErrorExaminer(): boolean {
if (otherErrorMap.size > 0) {
for (const msg of otherErrorMap.values()) {
console.log(msg);
}
otherErrorMap.clear();
}
if (rejectMap.size > 0) {
for (const msg of rejectMap.values()) {
console.log(msg);
}
rejectMap.clear();
return false;
}
return true;
}