oak-frontend-base/lib/context/BackendRuntimeContext.js

73 lines
2.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BackendRuntimeContext = void 0;
const tslib_1 = require("tslib");
const AsyncRowStore_1 = require("oak-domain/lib/store/AsyncRowStore");
const assert_1 = tslib_1.__importDefault(require("assert"));
class BackendRuntimeContext extends AsyncRowStore_1.AsyncContext {
subscriberId;
be;
ns;
// 本map中记录了要求推送event到客户端的operaion
eventOperationMap = {};
getNavigatorState() {
return this.ns;
}
getSubscriberId() {
return this.subscriberId;
}
getBriefEnvironment() {
return this.be;
}
async getSerializedData() {
return {
// 在后台事务Restart时subscriberId不能跟随此时是在完全后台异步的环境里执行
// sid: this.subscriberId,
be: this.be,
ns: this.ns,
};
}
async initialize(data) {
if (data?.sid) {
this.subscriberId = data.sid;
}
if (data?.be) {
this.be = data.be;
}
if (data?.ns) {
this.ns = data.ns;
}
}
/**
* 未来可以支持在event中带id的占位符到saveOpRecord时再动态注入 by Xc
* @param operationId
* @param event
*/
saveOperationToEvent(operationId, event) {
if (this.eventOperationMap[event]) {
(0, assert_1.default)(!this.eventOperationMap[event].includes(operationId)); // 一个operation不可能被save两次
this.eventOperationMap[event].push(operationId);
}
else {
this.eventOperationMap[event] = [operationId];
}
}
async commit() {
this.eventOperationMap = {};
return super.commit();
}
async rollback() {
this.eventOperationMap = {};
return super.rollback();
}
/**
* 某些特殊应用可能要手动清除subscriberIdtaicang)
*/
clearSubscriber() {
this.subscriberId = undefined;
}
}
exports.BackendRuntimeContext = BackendRuntimeContext;
;
exports.default = BackendRuntimeContext;