Я пытаюсь построить словарь, основанный на вызовах API, которые мне нужно сделать, предоставляя API определенный идентификатор для каждого вызова.После этого процесса мне нужно оперировать сгенерированным словарем.Проблема в том, что я не могу заставить асинхронность работать должным образом.
Я пытался реализовать Promises безуспешно.
var self = this;
function fillPropertyDict(){
var itemsProcessed = 0;
return new Promise(function(resolve) {
//Loop for every ID
self._bimIds.forEach((bimId) => {
itemsProcessed++;
//Calling the API
self.viewer.model.getProperties(bimId, (resultado) => {
resultado.properties.forEach((prop) => {
if(prop.displayName == 'Type' && prop.displayCategory == 'BIM 360') {
var foundIndex = self._propertyDictionary.findIndex(x => x.dbId == bimId)
if (foundIndex > 0){
self._propertyDictionary[foundIndex].equipment = prop.displayValue
} else {
var el = new Object();
el.dbId = bimId;
el.equipment = prop.displayValue;
el.sap = '';
self._propertyDictionary.push(el);
}
} else if (prop.displayName == 'Description' && prop.displayCategory == 'BIM 360') {
var foundIndex = self._propertyDictionary.findIndex(x => x.dbId == bimId)
if (foundIndex > 0){
self._propertyDictionary[foundIndex].sap = prop.displayValue
} else {
var el = new Object();
el.dbId = bimId;
el.equipment = '';
el.sap = prop.displayValue;
self._propertyDictionary.push(el);
}
}
})
})
//If count reaches array length, resolve Promise
if(itemsProcessed == self._bimIds.length){
//Resolve inside callback
resolve(self._propertyDictionary);
}
})
});
}
//Call function
fillPropertyDict().
then(function(result) {
//Let's print the dictionary
console.log('Lets see self._propertyDictionary');
console.log( JSON.parse(JSON.stringify(result)) );
console.log(result);
}
Я хотел бы видеть фактический словарь, когда я вызываюфункция, содержащая обещание (fillPropertyDict ()).