修复async content中事件不使用await会报错的问题

This commit is contained in:
shijian 2023-12-18 00:29:57 +08:00
parent 7cade08dd9
commit d6941b3774
1 changed files with 22 additions and 14 deletions

View File

@ -32143,21 +32143,29 @@ new Promise(resolve=>{
if(!_status.event) return;
// game.createEvent的时候还没立即push到next里
Promise.resolve().then(()=>{
const eventPromise=_status.event.next.find(e=>e.toEvent()==event);
// 如果父级事件也是一个异步的话,那应该立即执行这个事件的
// 如果在AsyncFunction执行过程中在别的位置新建了一个异步事件那也直接等会set配置完执行
if(eventPromise&&_status.event.content instanceof AsyncFunction){
if(_status.event!=eventPromise){
eventPromise.parent=_status.event;
_status.event=eventPromise;
game.getGlobalHistory('everything').push(eventPromise);
const callback=()=>{
let eventPromise=_status.event.next.find(e=>e.toEvent()==event);
// 如果父级事件也是一个异步的话,那应该立即执行这个事件的
// 如果在AsyncFunction执行过程中在别的位置新建了一个异步事件那也直接等会set配置完执行
if (eventPromise&&_status.event.content instanceof AsyncFunction){
if(_status.event!=eventPromise){
eventPromise.parent=_status.event;
_status.event=eventPromise;
game.getGlobalHistory('everything').push(eventPromise);
}
// 异步执行game.loop
// 不直接game.loop(event)是因为需要让别人可以手动set()和setContent()
// 再执行game.loop是因为原有的game.loop被await卡住了
// 得新执行一个只执行这个异步事件的game.loop
game.executingAsyncEvent=Promise.resolve().then(()=>game.loop(eventPromise))
.then(()=>{
delete game.executingAsyncEvent;
});
}
// 异步执行game.loop
// 不直接game.loop(event)是因为需要让别人可以手动set()和setContent()
// 再执行game.loop是因为原有的game.loop被await卡住了
// 得新执行一个只执行这个异步事件的game.loop
Promise.resolve().then(()=>game.loop(eventPromise));
}
};
// 没有await上个事件也就是_status.event
if(game.executingAsyncEvent) game.executingAsyncEvent.then(callback);
else callback();
});
});
this.#event=event;