Upsilon-VsCode/Client/node_modules/vscode-languageclient/lib/utils/async.js

65 lines
2.1 KiB
JavaScript
Executable File

/* --------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
* ------------------------------------------------------------------------------------------ */
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
class Delayer {
constructor(defaultDelay) {
this.defaultDelay = defaultDelay;
this.timeout = undefined;
this.completionPromise = undefined;
this.onSuccess = undefined;
this.task = undefined;
}
trigger(task, delay = this.defaultDelay) {
this.task = task;
if (delay >= 0) {
this.cancelTimeout();
}
if (!this.completionPromise) {
this.completionPromise = new Promise((resolve) => {
this.onSuccess = resolve;
}).then(() => {
this.completionPromise = undefined;
this.onSuccess = undefined;
var result = this.task();
this.task = undefined;
return result;
});
}
if (delay >= 0 || this.timeout === void 0) {
this.timeout = setTimeout(() => {
this.timeout = undefined;
this.onSuccess(undefined);
}, delay >= 0 ? delay : this.defaultDelay);
}
return this.completionPromise;
}
forceDelivery() {
if (!this.completionPromise) {
return undefined;
}
this.cancelTimeout();
let result = this.task();
this.completionPromise = undefined;
this.onSuccess = undefined;
this.task = undefined;
return result;
}
isTriggered() {
return this.timeout !== void 0;
}
cancel() {
this.cancelTimeout();
this.completionPromise = undefined;
}
cancelTimeout() {
if (this.timeout !== void 0) {
clearTimeout(this.timeout);
this.timeout = undefined;
}
}
}
exports.Delayer = Delayer;