UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

51 lines (50 loc) 1.73 kB
"use strict"; 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); } }); }