mirror of
https://github.com/flynx/types.js.git
synced 2025-10-29 02:20:07 +00:00
more cleanup and not sync promise looks complete...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
ccdc832685
commit
a95eb234c4
53
Promise.js
53
Promise.js
@ -795,6 +795,34 @@ object.Constructor('ProxyPromise', Promise, {
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
var syncAllProxy =
|
||||
function(name){
|
||||
return function(lst){
|
||||
var sync = true
|
||||
for(var e of lst){
|
||||
if(e instanceof Promise
|
||||
&& !(e instanceof SyncPromise)){
|
||||
sync = false
|
||||
break } }
|
||||
return sync ?
|
||||
this.resolve(lst)
|
||||
: Promise[name](lst) } }
|
||||
|
||||
// XXX REVISE/TEST...
|
||||
var syncAnyPromise =
|
||||
function(name){
|
||||
return function(lst){
|
||||
for(var e of lst){
|
||||
if(e instanceof SyncPromise
|
||||
&& !('error' in e)){
|
||||
return e }
|
||||
if(!(e instanceof Promise)){
|
||||
return this.resolve(e) } }
|
||||
return Promise[name](list) } }
|
||||
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
// XXX EXPEREMENTAL...
|
||||
// XXX DOCS...
|
||||
// XXX like promise but if a value can be generated sync then this will
|
||||
@ -803,6 +831,17 @@ object.Constructor('ProxyPromise', Promise, {
|
||||
var SyncPromise =
|
||||
module.SyncPromise =
|
||||
object.Constructor('SyncPromise', Promise, {
|
||||
// NOTE: we need to overload these as the builtin versions sneak-in
|
||||
// async-ness before we can catch it in .__new__(..)
|
||||
resolve: function(value){
|
||||
return new this(function(resolve){ resolve(value) }) },
|
||||
reject: function(error){
|
||||
return new this(function(_, reject){ reject(error) }) },
|
||||
all: syncAllProxy('all'),
|
||||
allSettled: syncAllProxy('allSettled'),
|
||||
any: syncAnyProxy('any'),
|
||||
race: syncAnyProxy('race'),
|
||||
},{
|
||||
//value: undefined,
|
||||
//error: undefined,
|
||||
|
||||
@ -821,14 +860,14 @@ object.Constructor('SyncPromise', Promise, {
|
||||
// NOTE: if func calls resolve(..) with a promise then this will return
|
||||
// that promise...
|
||||
__new__: function(context, func){
|
||||
var result
|
||||
var value
|
||||
var resolve = function(res){
|
||||
result = res }
|
||||
return (value = res) }
|
||||
var rejected
|
||||
var error
|
||||
var reject = function(err){
|
||||
rejected = true
|
||||
error = err }
|
||||
return (error = err) }
|
||||
// call...
|
||||
try{
|
||||
func(resolve, reject)
|
||||
@ -836,12 +875,12 @@ object.Constructor('SyncPromise', Promise, {
|
||||
reject(err) }
|
||||
// async...
|
||||
if(!error
|
||||
&& result instanceof Promise){
|
||||
return result }
|
||||
&& value instanceof Promise){
|
||||
return value }
|
||||
// sync...
|
||||
var obj = Promise.resolve(result)
|
||||
var obj = Promise.resolve(value)
|
||||
obj.__proto__ = this.prototype
|
||||
obj.value = result
|
||||
obj.value = value
|
||||
rejected
|
||||
&& (obj.error = error)
|
||||
return obj },
|
||||
|
||||
@ -98,6 +98,7 @@ Library of JavaScript type extensions, types and utilities.
|
||||
- [`Promise.sync(..)` / `promise.SyncPromice(..)`](#promisesync--promisesyncpromice)
|
||||
- [`<promise>.sync(..)`](#promisesync)
|
||||
- [`<sync-promise>.value` / `<sync-promise>.error`](#sync-promisevalue--sync-promiseerror)
|
||||
- [`Promise.sync.all(..)` / `Promise.sync.allSettled(..)` / `Promise.sync.any(..)` / `Promise.sync.race(..)`](promisesyncall--promisesyncallsettled--promisesyncany--promisesyncrace`)
|
||||
- [Promise utilities](#promise-utilities)
|
||||
- [`Promise.awaitOrRun(..)`](#promiseawaitorrun)
|
||||
- [Generator extensions and utilities](#generator-extensions-and-utilities)
|
||||
@ -2045,6 +2046,12 @@ if it _rejected_ then re-throw the `<error>`.
|
||||
rejection `.error`.
|
||||
|
||||
|
||||
#### `Promise.sync.all(..)` / `Promise.sync.allSettled(..)` / `Promise.sync.any(..)` / `Promise.sync.race(..)`
|
||||
|
||||
Equivalents to `Promise`'s version but will run sync if the relevant
|
||||
items in the input are either non-promises or `<sync-promise>`s.
|
||||
|
||||
|
||||
|
||||
### Promise utilities
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ig-types",
|
||||
"version": "6.24.1",
|
||||
"version": "6.24.2",
|
||||
"description": "Generic JavaScript types and type extensions...",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user