@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
51 lines (50 loc) • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeAbortableReaction = makeAbortableReaction;
const mobx_1 = require("mobx");
const mobx_state_tree_1 = require("mobx-state-tree");
const aborting_1 = require("./aborting");
const stopToken_1 = require("./stopToken");
function makeAbortableReaction(self, dataFunction, asyncReactionFunction, reactionOptions, startedFunction, successFunction, errorFunction) {
let inProgress;
function handleError(error) {
if (!(0, aborting_1.isAbortException)(error)) {
console.error(error);
if ((0, mobx_state_tree_1.isAlive)(self)) {
errorFunction(error);
}
}
}
(0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.reaction)(() => {
try {
return dataFunction(self);
}
catch (e) {
handleError(e);
return undefined;
}
}, async (data, mobxReactionHandle) => {
if (inProgress) {
(0, stopToken_1.stopStopToken)(inProgress);
}
if (!(0, mobx_state_tree_1.isAlive)(self)) {
return;
}
inProgress = (0, stopToken_1.createStopToken)();
startedFunction(inProgress);
try {
const result = await asyncReactionFunction(data, inProgress, self, mobxReactionHandle);
if ((0, mobx_state_tree_1.isAlive)(self)) {
successFunction(result);
}
}
catch (e) {
handleError(e);
}
}, reactionOptions));
(0, mobx_state_tree_1.addDisposer)(self, () => {
if (inProgress) {
(0, stopToken_1.stopStopToken)(inProgress);
}
});
}