Асинхронизация разрешена раньше, чем ожидалось - PullRequest
1 голос
/ 06 мая 2019

Эта функция написана мной самостоятельно

        async function asyncAreaLoad() {
            console.log( "asyncAreaLoad\t" + config.area + "\t" + room.id );

            let check = await state.PersistanceManager.checkArea( config.area )
            if ( check ) {
                Logger.verbose( `PERSISTANCE:\troom: \t${room.id} EXIST, no Fetch` );
                console.log( "NO FETCH" );
                return;
            }

            const perLoader = state.EntityLoaderRegistry.get( 'persistence' );
            perLoader.setArea( config.area );
            const haveItems = await perLoader.hasData();

            if ( !haveItems ) {
                Logger.verbose( `PERSISTANCE:\t\tArea\t[${config.area}]\t with NO DATA!` );
                console.log( "NO DATA" );
                return;
            }

            let aw = await perLoader.fetchAll();
            console.log( "FETCHED" );

            state.PersistanceManager.addArea( config.area, aw.rooms );
            Logger.verbose( `PERSISTANCE:\t\tArea\t[${config.area}]\t LOADED!` );
            console.log( "Loaded" );
            // state.PersistanceManager.populateArea( config.area );
        }

        await asyncAreaLoad();

Как видно по результату, функция запускается четыре раза и имя области совпадает valinorCastle .Я ожидал, что perLoader.fetchAll был запущен один раз, потому что addArea делает checkArea чтобы вернуть true .Вместо этого я получил это

Результат:

asyncAreaLoad   valinorCastle   valinorCastleMainRoom
asyncAreaLoad   valinorCastle   valinorCastle2
asyncAreaLoad   valinorCastle   valinorCastle3
asyncAreaLoad   valinorCastle   valinorCastle4
   **FETCHED**
    **AddedArea valinorCastle**
    Loaded
    **FETCHED**
    Loaded
    **FETCHED**
    Loaded
    **FETCHED**
    Loaded
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...