Код не выполняется после цикла с обещаниями - PullRequest
0 голосов
/ 01 июня 2018

Итак, у меня есть функция, которая принимает идентификатор и возвращает соответствующую карту свойств через обещание.Поэтому я сделал цикл и повторил свою функцию со всеми моими идентификаторами, но он никогда не выполняет код вне цикла.

async getProps(dbId) {
    const properties = Viewer.properties //creates an empty map
    return new Promise((resolve, reject) => {
            let prom = new Promise((resolve, reject) => {
                this.gui.getProperties(
                    dbId,
                    args => {
                        console.log('properties', args)
                        resolve(args.properties)
                    },
                    reject
                )
            })

            prom.then(props => {
                properties.set(dbId, props)
                resolve(properties.entries())
            })
            console.log('properties', properties)
        }
    )
}

Я хочу создать карту с идентификатором в качестве ключа и массивомсвойства как ценность.Это происходит по назначению.

Так я использую функцию

async getConcreteIds() {
    let wallfloorids = this.getWallIds().concat(this.getFloorIds());
    // let concreteIds = [];
    for(let id of wallfloorids) {
        let p1 = await this.view.getProps(id);
        console.log(p1);
    }
    console.log("Hello");
}

. Я перебираю свои идентификаторы и вызываю функцию getProperties, и она записывает карту в соответствии с назначением.Но это никогда не выходит из цикла.wallfloorids имеет 52 записи, поэтому это не бесконечный цикл.Я думаю, что структура моей функции getProperties является причиной, но я не знаю, что изменить.Я попытался изменить структуру, но затем он возвращает пустую карту, и остальная часть кода выполняется.Спасибо!

1 Ответ

0 голосов
/ 01 июня 2018

Сейчас состояние

getProperties(dbId) {
    const properties = Viewer.properties
    return new Promise((resolve, reject) => {
        this.gui.getProperties(
            dbId,
            args => {
                resolve(args.properties)
            },
            reject
        )
    })

}


async getConcreteIds() {
    let wallfloorids = this.getWallIds().concat(this.getFloorIds());
    let concreteIds = [];
    for (let id of wallfloorids) {
        let p1 = await this.view.getProperties(id);
        console.log(p1);
            for (let prop of p1){
                if (prop.displayCategory === "Materialien und Oberflächen" && prop.displayValue.contains("Concrete"))
                    concreteIds.push(id);
            }
    }
    return concreteIds;
}

onlyConcrete() {
    let ids = [];
    const concreteIds = this.getConcreteIds();
    console.log(concreteIds);
    this.viewer.isolateById(concreteIds)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...