Почему асинхронная функция возвращает «объект зоны»

этот вопрос немного связан с этим. Здесь у нас есть следующий код в ANGULAR:

private async createFloor(name) 
{
    let newFloorData = { 
        floorName: name,
        percent: 0,
        requestSubscription: null,
        finish: false,
        deleted: false,
    };

    ...

    return newFloorData;
}

public async addFloor(event) 
{
     let newFloorData = this.createFloor('test name');
     debugger;
     ...
}

И в отладчике хрома отладчика, когда я смотрю на newFloorData, я получаю следующую информацию:

ZoneAwarePromise

__zone_symbol__state : правда

__zone_symbol__value : {процент: 0, requestSubscription: ноль, конец: ложь, удалено: ложь}

proto : объект

Однако, если я добавлю await в функцию addFloor:

public async addFloor(event) 
{
     let newFloorData = await this.createFloor('test name');
     debugger;
     ...
}

В отладчике я просто получаю объект newFloorData, возвращаемый createFloor (что интуитивно понятно).

Вопрос. Почему? Какой механизм стоит за этим поведением?


person Kamil Kiełczewski    schedule 13.02.2018    source источник


Ответы (1)


Angular использует zone.js для исправления почти всех асинхронных API. Он делает это, чтобы получить уведомление, когда произошло асинхронное действие, а затем запускает запуск обнаружения изменений.

Смотрите также

person Günter Zöchbauer    schedule 13.02.2018