我正在使用viewer.getProperties(dbId, onSuccessCallback, onErrorCallback)方法来获取查看器中对象的属性。我想为所有选定对象运行该方法,为每个对象提取属性的子集,并将子集呈现在表中。为多个元素并行运行viewer.getProperties,然后处理结果
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不是问题。
正如我能看到的,我一直在寻找来自bluebird.js的Promise.all()以控制执行并等待所有getProperties调用返回,但到目前为止失败。
问候, Torjus
您能否接受答复作为答复或解释它如何解决您的问题?谢谢 –
谢谢Philippe!这工作完美,我认为getProperties方法有问题,但事实证明我误解了解析和拒绝的使用。 – torjuss