Object.defineProperty(document,'addEventListener',{value:(...a)=>console.log(...a)});
Object.defineProperty(window,'addEventListener',{value:(...a)=>console.log(...a)});
Object.defineProperty(document.head,'insertBefore',{value(...a){console.log(...a);}});
const promisify = fn=>(
(...args)=>(
new Promise(
(resolve,reject)=>fn.apply(null,[
...args,
(err,res)=> (err!=null?reject(err):resolve(res))
])
)
)
);
const testSuccess = (arg,cb) => { cb(null,arg) };
const testFailed = (arg,cb) => { cb(new Error(arg)) };
(async()=>{
let fn = promisify(testSuccess);
let res = await fn('Успех');
console.log(res);
})();
(async()=>{
let fn = promisify(testFailed);
let res = await fn('Ошибка');
console.log(res);
})();