syncApply ({timeout, fn, args = [], scope = this}) { return new Promise((resolve, reject) => { try { setTimeout(() => { resolve(fn.apply(scope, args)) }, timeout) } catch (err) { reject(err) } }) }