This repository was archived by the owner on Dec 21, 2021. It is now read-only.
File tree Expand file tree Collapse file tree 1 file changed +24
-5
lines changed
Expand file tree Collapse file tree 1 file changed +24
-5
lines changed Original file line number Diff line number Diff line change @@ -220,13 +220,32 @@ export function CacheFn(fn: Parameters<typeof mem>[0], {
220220type PromiseResolve = L . Compulsory < Parameters < Promise < any > [ 'then' ] > > [ 0 ]
221221type PromiseReject = L . Compulsory < Parameters < Promise < any > [ 'then' ] > > [ 1 ]
222222
223- export function Defer < T > ( executor : ( ...args : Parameters < Promise < T > [ 'then' ] > ) => void = ( ) => { } ) {
224- let resolve : PromiseResolve = ( ) => { }
225- let reject : PromiseReject = ( ) => { }
223+ const noop = ( ) => { }
224+
225+ export function Defer < T > ( executor : ( ...args : Parameters < Promise < T > [ 'then' ] > ) => void = noop ) {
226+ let resolveFn : PromiseResolve | undefined
227+ let rejectFn : PromiseResolve | undefined
228+ const resolve : PromiseReject = ( value ) => {
229+ if ( resolveFn ) {
230+ const r = resolveFn
231+ resolveFn = undefined
232+ rejectFn = undefined
233+ r ( value )
234+ }
235+ }
236+ const reject : PromiseReject = ( error ) => {
237+ if ( rejectFn ) {
238+ const r = rejectFn
239+ resolveFn = undefined
240+ rejectFn = undefined
241+ r ( error )
242+ }
243+ }
244+
226245 // eslint-disable-next-line promise/param-names
227246 const p = new Promise ( ( _resolve , _reject ) => {
228- resolve = _resolve
229- reject = _reject
247+ resolveFn = _resolve
248+ rejectFn = _reject
230249 executor ( resolve , reject )
231250 } )
232251 p . catch ( ( ) => { } ) // prevent unhandledrejection
You can’t perform that action at this time.
0 commit comments