所以我有一个函数,它接受一个id并通过promise返回相应的属性映射。所以我做了一个循环并用我的所有ID迭代我的函数,但它从不执行循环之外的代码。
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)
}
)
}
我想要的是创建一个ID为键的映射,以及属性数组作为值。这是按预期发生的。
这就是我使用函数
的方法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");
}
我遍历我的ID并调用getProperties
函数,并按预期记录地图。但它永远不会离开循环。 wallfloorids
有52个条目,因此它不是无限循环。
我认为我的getProperties函数的结构是原因,但我不知道要改变什么。我尝试更改结构,但随后它返回一个空映射,其余代码被执行。
谢谢!
答案 0 :(得分:0)
现在状态
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)
}