Simplifying promises

This commit is contained in:
David Négrier 2021-07-22 10:41:45 +02:00
parent 6d4c2cfd39
commit ae5617f3a0
2 changed files with 69 additions and 71 deletions

View file

@ -268,8 +268,7 @@ export class SocketManager {
//check and create new room //check and create new room
let roomPromise = this.roomsPromises.get(roomId); let roomPromise = this.roomsPromises.get(roomId);
if (roomPromise === undefined) { if (roomPromise === undefined) {
roomPromise = new Promise<GameRoom>((resolve, reject) => { roomPromise = GameRoom.create(
GameRoom.create(
roomId, roomId,
(user: User, group: Group) => this.joinWebRtcRoom(user, group), (user: User, group: Group) => this.joinWebRtcRoom(user, group),
(user: User, group: Group) => this.disConnectedUser(user, group), (user: User, group: Group) => this.disConnectedUser(user, group),
@ -286,12 +285,11 @@ export class SocketManager {
) )
.then((gameRoom) => { .then((gameRoom) => {
gaugeManager.incNbRoomGauge(); gaugeManager.incNbRoomGauge();
resolve(gameRoom); return gameRoom;
}) })
.catch((e) => { .catch((e) => {
this.roomsPromises.delete(roomId); this.roomsPromises.delete(roomId);
reject(e); throw e;
});
}); });
this.roomsPromises.set(roomId, roomPromise); this.roomsPromises.set(roomId, roomPromise);
} }

View file

@ -1,7 +1,9 @@
import { registeredCallbacks } from "./Api/iframe/registeredCallbacks"; import { registeredCallbacks } from "./Api/iframe/registeredCallbacks";
import { import {
IframeResponseEvent, IframeResponseEvent,
IframeResponseEventMap, isIframeAnswerEvent, isIframeErrorAnswerEvent, IframeResponseEventMap,
isIframeAnswerEvent,
isIframeErrorAnswerEvent,
isIframeResponseEventWrapper, isIframeResponseEventWrapper,
TypedMessageEvent, TypedMessageEvent,
} from "./Api/Events/IframeEvent"; } from "./Api/Events/IframeEvent";
@ -19,20 +21,17 @@ import type { Popup } from "./Api/iframe/Ui/Popup";
import type { Sound } from "./Api/iframe/Sound/Sound"; import type { Sound } from "./Api/iframe/Sound/Sound";
import { answerPromises, queryWorkadventure, sendToWorkadventure } from "./Api/iframe/IframeApiContribution"; import { answerPromises, queryWorkadventure, sendToWorkadventure } from "./Api/iframe/IframeApiContribution";
const initPromise = new Promise<void>((resolve) => {
// Notify WorkAdventure that we are ready to receive data // Notify WorkAdventure that we are ready to receive data
queryWorkadventure({ const initPromise = queryWorkadventure({
type: 'getState', type: "getState",
data: undefined data: undefined,
}).then((state => { }).then((state) => {
setPlayerName(state.nickname); setPlayerName(state.nickname);
setRoomId(state.roomId); setRoomId(state.roomId);
setMapURL(state.mapUrl); setMapURL(state.mapUrl);
setTags(state.tags); setTags(state.tags);
setUuid(state.uuid); setUuid(state.uuid);
initVariables(state.variables as Map<string, unknown>); initVariables(state.variables as Map<string, unknown>);
resolve();
}));
}); });
const wa = { const wa = {
@ -186,7 +185,8 @@ declare global {
window.WA = wa; window.WA = wa;
window.addEventListener( window.addEventListener(
"message", <T extends keyof IframeResponseEventMap>(message: TypedMessageEvent<IframeResponseEvent<T>>) => { "message",
<T extends keyof IframeResponseEventMap>(message: TypedMessageEvent<IframeResponseEvent<T>>) => {
if (message.source !== window.parent) { if (message.source !== window.parent) {
return; // Skip message in this event listener return; // Skip message in this event listener
} }
@ -200,7 +200,7 @@ window.addEventListener(
const resolver = answerPromises.get(queryId); const resolver = answerPromises.get(queryId);
if (resolver === undefined) { if (resolver === undefined) {
throw new Error('In Iframe API, got an error answer for a question that we have no track of.'); throw new Error("In Iframe API, got an error answer for a question that we have no track of.");
} }
resolver.reject(new Error(payloadError)); resolver.reject(new Error(payloadError));
@ -211,7 +211,7 @@ window.addEventListener(
const resolver = answerPromises.get(queryId); const resolver = answerPromises.get(queryId);
if (resolver === undefined) { if (resolver === undefined) {
throw new Error('In Iframe API, got an answer for a question that we have no track of.'); throw new Error("In Iframe API, got an answer for a question that we have no track of.");
} }
resolver.resolve(payloadData); resolver.resolve(payloadData);