Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9346661
syncpromise.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Subscribers
None
syncpromise.js
View Options
/* eslint-disable @typescript-eslint/explicit-function-return-type */
/* eslint-disable @typescript-eslint/typedef */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
/* eslint-disable @typescript-eslint/no-explicit-any */
import
{
isThenable
}
from
'./is'
;
/**
* Creates a resolved sync promise.
*
* @param value the value to resolve the promise with
* @returns the resolved sync promise
*/
export
function
resolvedSyncPromise
(
value
)
{
return
new
SyncPromise
(
function
(
resolve
)
{
resolve
(
value
);
});
}
/**
* Creates a rejected sync promise.
*
* @param value the value to reject the promise with
* @returns the rejected sync promise
*/
export
function
rejectedSyncPromise
(
reason
)
{
return
new
SyncPromise
(
function
(
_
,
reject
)
{
reject
(
reason
);
});
}
/**
* Thenable class that behaves like a Promise and follows it's interface
* but is not async internally
*/
var
SyncPromise
=
/** @class */
(
function
()
{
function
SyncPromise
(
executor
)
{
var
_this
=
this
;
this
.
_state
=
0
/* PENDING */
;
this
.
_handlers
=
[];
/** JSDoc */
this
.
_resolve
=
function
(
value
)
{
_this
.
_setResult
(
1
/* RESOLVED */
,
value
);
};
/** JSDoc */
this
.
_reject
=
function
(
reason
)
{
_this
.
_setResult
(
2
/* REJECTED */
,
reason
);
};
/** JSDoc */
this
.
_setResult
=
function
(
state
,
value
)
{
if
(
_this
.
_state
!==
0
/* PENDING */
)
{
return
;
}
if
(
isThenable
(
value
))
{
void
value
.
then
(
_this
.
_resolve
,
_this
.
_reject
);
return
;
}
_this
.
_state
=
state
;
_this
.
_value
=
value
;
_this
.
_executeHandlers
();
};
/** JSDoc */
this
.
_executeHandlers
=
function
()
{
if
(
_this
.
_state
===
0
/* PENDING */
)
{
return
;
}
var
cachedHandlers
=
_this
.
_handlers
.
slice
();
_this
.
_handlers
=
[];
cachedHandlers
.
forEach
(
function
(
handler
)
{
if
(
handler
[
0
])
{
return
;
}
if
(
_this
.
_state
===
1
/* RESOLVED */
)
{
// eslint-disable-next-line @typescript-eslint/no-floating-promises
handler
[
1
](
_this
.
_value
);
}
if
(
_this
.
_state
===
2
/* REJECTED */
)
{
handler
[
2
](
_this
.
_value
);
}
handler
[
0
]
=
true
;
});
};
try
{
executor
(
this
.
_resolve
,
this
.
_reject
);
}
catch
(
e
)
{
this
.
_reject
(
e
);
}
}
/** JSDoc */
SyncPromise
.
prototype
.
then
=
function
(
onfulfilled
,
onrejected
)
{
var
_this
=
this
;
return
new
SyncPromise
(
function
(
resolve
,
reject
)
{
_this
.
_handlers
.
push
([
false
,
function
(
result
)
{
if
(
!
onfulfilled
)
{
// TODO: ¯\_(ツ)_/¯
// TODO: FIXME
resolve
(
result
);
}
else
{
try
{
resolve
(
onfulfilled
(
result
));
}
catch
(
e
)
{
reject
(
e
);
}
}
},
function
(
reason
)
{
if
(
!
onrejected
)
{
reject
(
reason
);
}
else
{
try
{
resolve
(
onrejected
(
reason
));
}
catch
(
e
)
{
reject
(
e
);
}
}
},
]);
_this
.
_executeHandlers
();
});
};
/** JSDoc */
SyncPromise
.
prototype
.
catch
=
function
(
onrejected
)
{
return
this
.
then
(
function
(
val
)
{
return
val
;
},
onrejected
);
};
/** JSDoc */
SyncPromise
.
prototype
.
finally
=
function
(
onfinally
)
{
var
_this
=
this
;
return
new
SyncPromise
(
function
(
resolve
,
reject
)
{
var
val
;
var
isRejected
;
return
_this
.
then
(
function
(
value
)
{
isRejected
=
false
;
val
=
value
;
if
(
onfinally
)
{
onfinally
();
}
},
function
(
reason
)
{
isRejected
=
true
;
val
=
reason
;
if
(
onfinally
)
{
onfinally
();
}
}).
then
(
function
()
{
if
(
isRejected
)
{
reject
(
val
);
return
;
}
resolve
(
val
);
});
});
};
return
SyncPromise
;
}());
export
{
SyncPromise
};
//# sourceMappingURL=syncpromise.js.map
File Metadata
Details
Attached
Mime Type
text/x-java
Expires
Fri, Jul 4, 4:18 PM (2 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3361686
Attached To
rDWAPPS Web applications
Event Timeline
Log In to Comment