Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
renderjs
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
renderjs
Commits
1c0c48b2
Commit
1c0c48b2
authored
Jan 10, 2023
by
Romain Courteaud
🐙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Mutex: execute next promise only when ALL previous promises are finished
parent
5313f5e1
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
7 deletions
+20
-7
renderjs.js
renderjs.js
+20
-7
No files found.
renderjs.js
View file @
1c0c48b2
...
@@ -272,19 +272,32 @@
...
@@ -272,19 +272,32 @@
this
.
_latest_promise
=
null
;
this
.
_latest_promise
=
null
;
};
};
function
doNothing
()
{
return
;
}
Mutex
.
prototype
=
{
Mutex
.
prototype
=
{
constructor
:
Mutex
,
constructor
:
Mutex
,
lockAndRun
:
function
lockMutexAndRun
(
callback
)
{
lockAndRun
:
function
lockMutexAndRun
(
callback
)
{
var
previous_promise
=
this
.
_latest_promise
;
var
previous_promise
=
this
.
_latest_promise
,
returned_promise
;
if
(
previous_promise
===
null
)
{
if
(
previous_promise
===
null
)
{
this
.
_latest_promise
=
RSVP
.
resolve
(
callback
());
this
.
_latest_promise
=
RSVP
.
resolve
(
callback
());
}
else
{
return
this
.
_latest_promise
;
this
.
_latest_promise
=
this
.
_latest_promise
}
returned_promise
=
previous_promise
.
always
(
function
()
{
.
always
(
function
()
{
return
callback
();
return
callback
();
});
});
}
// Do not return latest promise, to not allow external caller
return
this
.
_latest_promise
;
// to explicitely cancel it,
// ie, ensure next promise is triggered only when ALL previous
// promised are finished (not only the single previous one)
this
.
_latest_promise
=
RSVP
.
all
([
previous_promise
.
always
(
doNothing
),
returned_promise
.
always
(
doNothing
)
]);
return
returned_promise
;
}
}
};
};
...
...
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