oak-frontend-base/es/aspects/AspectService.js

29 lines
1.0 KiB
JavaScript

import assert from "assert";
export const createService = (cache) => {
return new Proxy({}, {
get: (target, prop) => {
assert(typeof prop === "string", "Aspect service name must be a string");
return (params, callback, dontPublish, ignoreContext) => {
const paramsCopy = structuredClone(params);
if (process.env.NODE_ENV === "development") {
console.log("Aspect call:", prop, paramsCopy);
}
return new Promise((resolve, reject) => {
cache
.exec(prop, paramsCopy, callback, dontPublish, ignoreContext)
.then((res) => {
resolve(res.result);
})
.catch((err) => {
reject(err);
});
});
};
},
// 禁止任何set
set: () => {
throw new Error("Aspect service is readonly");
},
});
};