29 lines
1.0 KiB
JavaScript
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");
|
|
},
|
|
});
|
|
};
|