Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
rsvp.js
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Romain Courteaud
rsvp.js
Commits
e410c7ce
Commit
e410c7ce
authored
Sep 25, 2018
by
Romain Courteaud
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Try to speed up queue
Reduce number of .then call. But memory usage increases :/
parent
a95309fe
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
59 additions
and
71 deletions
+59
-71
lib/rsvp/promise.js
lib/rsvp/promise.js
+1
-1
lib/rsvp/queue.js
lib/rsvp/queue.js
+58
-70
No files found.
lib/rsvp/promise.js
View file @
e410c7ce
...
...
@@ -121,7 +121,7 @@ Promise.prototype = {
then
:
function
(
done
,
fail
)
{
this
.
off
(
'
error
'
,
onerror
);
var
thenPromise
=
new
this
.
constructor
(
function
()
{},
var
thenPromise
=
new
Promise
(
function
()
{},
function
()
{
thenPromise
.
trigger
(
'
promise:cancelled
'
,
{});
});
...
...
lib/rsvp/queue.js
View file @
e410c7ce
...
...
@@ -12,92 +12,80 @@ function ResolvedQueueError(message) {
ResolvedQueueError
.
prototype
=
new
Error
();
ResolvedQueueError
.
prototype
.
constructor
=
ResolvedQueueError
;
var
Queue
=
function
()
{
var
queue
=
this
,
promise_list
=
[],
promise
,
fulfill
,
reject
,
resolved
;
var
last_promise
,
i
;
var
Queue
=
function
()
{
if
(
!
(
this
instanceof
Queue
))
{
return
new
Queue
();
}
function
canceller
()
{
for
(
var
i
=
0
;
i
<
2
;
i
++
)
{
promise_list
[
i
].
cancel
();
var
queue
=
this
,
promise_stack
=
[],
then_stack
=
[];
Promise
.
call
(
queue
,
function
(
resolveQueue
,
rejectQueue
)
{
var
detectQueueSuccess
,
detectQueueError
;
function
handleQueue
()
{
if
(
then_stack
.
length
===
0
)
{
return
true
;
}
last_promise
=
promise_stack
[
promise_stack
.
length
-
1
];
promise_stack
.
splice
(
0
,
promise_stack
.
length
);
for
(
i
=
then_stack
.
length
-
1
;
i
>=
0
;
i
-=
2
)
{
last_promise
=
last_promise
.
then
(
then_stack
[
i
-
1
],
then_stack
[
i
]);
promise_stack
.
push
(
last_promise
);
}
then_stack
.
splice
(
0
,
then_stack
.
length
);
promise_stack
.
push
(
last_promise
.
then
(
detectQueueSuccess
,
detectQueueError
)
);
return
false
;
}
}
promise
=
new
Promise
(
function
(
done
,
fail
)
{
fulfill
=
function
(
fulfillmentValue
)
{
if
(
resolved
)
{
return
;}
queue
.
isFulfilled
=
true
;
queue
.
fulfillmentValue
=
fulfillmentValue
;
resolved
=
true
;
return
done
(
fulfillmentValue
);
detectQueueSuccess
=
function
(
fulfillmentValue
)
{
if
(
handleQueue
())
{
return
resolveQueue
(
fulfillmentValue
);
}
return
fulfillmentValue
;
};
reject
=
function
(
rejectedReason
)
{
if
(
resolved
)
{
return
;}
queue
.
isRejected
=
true
;
queue
.
rejectedReason
=
rejectedReason
;
resolved
=
true
;
return
fail
(
rejectedReason
)
;
detectQueueError
=
function
(
rejectedReason
)
{
if
(
handleQueue
())
{
return
rejectQueue
(
rejectedReason
)
;
}
throw
rejectedReason
;
};
},
canceller
);
promise_list
.
push
(
resolve
());
promise_list
.
push
(
promise_list
[
0
].
then
(
function
()
{
promise_list
.
splice
(
0
,
2
);
if
(
promise_list
.
length
===
0
)
{
fulfill
();
// Resolve by default
promise_stack
.
push
(
resolve
().
then
(
detectQueueSuccess
,
detectQueueError
)
);
},
function
()
{
// Cancel all created promises
var
i
;
then_stack
.
splice
(
0
,
then_stack
.
length
);
for
(
i
=
0
;
i
<
promise_stack
.
length
;
i
+=
1
)
{
promise_stack
[
i
].
cancel
();
}
}));
queue
.
cancel
=
function
()
{
if
(
resolved
)
{
return
;}
resolved
=
true
;
promise
.
cancel
();
promise
.
fail
(
function
(
rejectedReason
)
{
queue
.
isRejected
=
true
;
queue
.
rejectedReason
=
rejectedReason
;
});
};
queue
.
then
=
function
()
{
return
promise
.
then
.
apply
(
promise
,
arguments
);
};
queue
.
push
=
function
(
done
,
fail
)
{
var
last_promise
=
promise_list
[
promise_list
.
length
-
1
],
next_promise
;
});
if
(
resolved
)
{
queue
.
push
=
function
(
done
,
fail
)
{
if
(
queue
.
isFulfilled
||
queue
.
isRejected
)
{
throw
new
ResolvedQueueError
();
}
next_promise
=
last_promise
.
then
(
done
,
fail
);
promise_list
.
push
(
next_promise
);
// Handle pop
promise_list
.
push
(
next_promise
.
then
(
function
(
fulfillmentValue
)
{
promise_list
.
splice
(
0
,
2
);
if
(
promise_list
.
length
===
0
)
{
fulfill
(
fulfillmentValue
);
}
else
{
return
fulfillmentValue
;
}
},
function
(
rejectedReason
)
{
promise_list
.
splice
(
0
,
2
);
if
(
promise_list
.
length
===
0
)
{
reject
(
rejectedReason
);
}
else
{
throw
rejectedReason
;
}
}));
return
this
;
then_stack
.
unshift
(
done
,
fail
);
return
queue
;
};
return
queue
;
};
Queue
.
prototype
=
Object
.
create
(
Promise
.
prototype
);
...
...
Romain Courteaud
@romain
mentioned in commit
69c4eb02
·
Feb 25, 2020
mentioned in commit
69c4eb02
mentioned in commit 69c4eb0274ef7862471bf3378f098e3460c00b59
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment