Я использую viewer.getProperties(dbId, onSuccessCallback, onErrorCallback) для получения свойств объектов в моей программе просмотра. Я хочу запустить метод для всех выбранных объектов, извлечь подмножество свойств для каждого объекта и представить подмножества в таблице.
var subsets = [];
var selectFunctions = [];
handleSelection(selection, addProps, onError);
function handleSelection(selection, onSuccess, onError) {
for (var i = 0; i < selection.length; i++)
selectFunctions.push(_viewer.getProperties(selection[i], onSuccess, onError));
}
function addProps(data) {
var props = [];
for (var prop in data.properties) {
//Add property to props if some condition is true...
}
subsets.push(props);
}
Promise.all(_selectFunctions).then(function () {
console.log("Handled all selections");
//Add subsets to table...
}).catch(function (error) {
console.log("ERRROR");
});
Поскольку getProperties работает асинхронно, я не могу дождаться всех объектов до обновления таблицы. Таблица обновляется по одному объекту за раз, и мы бы предпочли обновить все сразу. Блокировка IO не проблема.
Как видно, я искал Promise.all() от bluebird. .js, чтобы контролировать выполнение и ждать возврата всех вызовов getProperties, но пока безуспешно.
С уважением, Торьюс.