/**
* @author twitter @arcanis
* @see https://twitter.com/arcanis/status/1235571321263845376/photo/1
*/
'use strict'
/**
* Liste d'erreurs concernant chaque pending Promise (ajouté à la création de la Promise et viré au resolve/reject)
* @type {Set<Error>}
*/
const pending = new Set()
// Lors de la sortie, on liste les promesses encore pending
process.on('exit', () => {
Array.from(pending).forEach(error => {
console.error(error.stack)
})
})
// on wrap le constructeur de Promise avec notre code qui ajoute les erreurs de pending promise
global.Promise = class extends Promise {
constructor (factory) {
super((resolve, reject) => {
const hangError = Error('A promise never resolved')
pending.add(hangError)
factory(
result => {
pending.delete(hangError)
resolve(result)
},
error => {
pending.delete(hangError)
reject(error)
}
)
})
}
}