Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 25 additions & 6 deletions apps/core/noname/init/compatible.js
Original file line number Diff line number Diff line change
Expand Up @@ -139,11 +139,18 @@ Object.assign(lib.element.GameEvent.prototype, {
// forResult
Object.assign(lib.element.GameEvent.prototype, {
then(onfulfilled, onrejected) {
return (this.parent ? this.parent.waitNext() : this.start()).then(
const event = /** @type { any } */ (this);
event._awaitingMode ??= "safe";
const promise = event.parent
? event.parent.waitNext()
: event.start().catch(error => {
event.recordError(error, true);
});
return promise.then(
onfulfilled
? () => {
return onfulfilled(
new Proxy(this, {
new Proxy(event, {
get(target, p, receiver) {
if (p === "then") {
return void 0;
Expand All @@ -157,15 +164,27 @@ Object.assign(lib.element.GameEvent.prototype, {
onrejected
);
},
/**
* 显式声明当前事件依赖此事件完成,等待事件报错时会影响当前流程。
*/
async link() {
const event = /** @type { any } */ (this);
event._awaitingMode = "strict";
await (event.parent ? event.parent.waitNext() : event.start());
if (event.error && !lib.config.ignore_error) {
throw event.error;
}
},
async forResult(...params) {
await this;
const event = /** @type { any } */ (this);
await event.link();
if (params.length == 0) {
return this.result;
return event.result ?? {};
}
if (params.length == 1) {
return this.result[params[0]];
return event.result[params[0]];
}
return Array.from(params).map(key => this.result[key]);
return Array.from(params).map(key => event.result[key]);
},
forResultBool() {
return this.forResult().then(r => r.bool);
Expand Down
Loading