commit 1578675ace837e847f21b950dc2a4aeadfb9ba8a
parent 27899c85b5f2e8d5363927626ab5466cc9eb7b65
Author: Dan Stillman <dstillman@zotero.org>
Date: Tue, 12 May 2015 19:57:57 -0400
Change 'finite' param to 'maxTime' in delayGenerator
Allows delaying up to a specified amount of time before yielding false
Diffstat:
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/chrome/content/zotero/xpcom/utilities_internal.js b/chrome/content/zotero/xpcom/utilities_internal.js
@@ -436,23 +436,30 @@ Zotero.Utilities.Internal = {
/**
* A generator that yields promises that delay for the given intervals
*
- * @param {Array<Integer>} intervals An array of intervals in milliseconds
- * @param {Boolean} [finite=FALSE] If TRUE, repeat the last interval forever
+ * @param {Array<Integer>} intervals - An array of intervals in milliseconds
+ * @param {Integer} [maxTime] - Total time to wait in milliseconds, after which the delaying
+ * promise will return false. Before maxTime has elapsed, or if
+ * maxTime isn't specified, the promises will yield true.
*/
- "delayGenerator": function (intervals, finite) {
+ "delayGenerator": function (intervals, maxTime) {
+ var totalTime = 0;
var lastInterval = intervals[intervals.length - 1];
while (true) {
let interval = intervals.shift();
if (interval) {
- lastInterval = interval;
- yield Zotero.Promise.delay(interval);
+ delay = lastInterval = interval;
}
- else if (finite) {
- yield Zotero.Promise.delay(lastInterval);
+ else if (infinite) {
+ delay = lastInterval;
}
else {
break;
}
+
+ totalTime += delay;
+
+ Zotero.debug("Delaying " + delay + " ms");
+ yield Zotero.Promise.delay(delay).return(!maxTime || totalTime <= maxTime);
}
},