我是承诺的新手,想要解决以下问题:
考虑一个主要的'class'函数Main()
,它代表一个three.js-Scene和一个'子类'函数Sub()
,它代表要渲染的数据:
Main()
有一个方法addSubDataToObject()
,可以new
Sub()
调用Main().data
个对象({id_x: data_from_url_x}
)Main()
有另一种方法renderDataObjects()
来呈现数据
(通过three.js addToScene()
)Sub()
在调用时通过方法getData()
检索远程数据
(使用XMLHttpRequest
调用WebWorker)并将其作为对象进行处理({id: data_from_url}
)调用后
var main = new Main();
我希望能够添加多个数据对象
main.addSubDataToObject(id_1, url_1);
main.addSubDataToObject(id_2, url_2);
并致电
main.renderDataObject();
当所有数据调用完成下载和处理时,将main.data
中的每个对象渲染到场景中。
目前,我使用回调将每个数据调用添加到场景中
main.addSubDataToObject(id_1, url_1, cb);
main.addSubDataToObject(id_1, url_2, cb);
但是,当然,这会按顺序添加它们,并根据有效负载进行延迟。
我想,例如,让Main()
的{{1}}将一个承诺返回到一系列承诺中,.addSubDataToObject()
与.renderDataObject()
一起等待解决所有承诺在渲染之前
但是,我没有得到如何与数据对象一起实现它以及如何使用promises处理'class'对象。如果可能的话(这对您来说似乎很实用),我非常感谢这种情况的示例结构。
答案 0 :(得分:1)
如果我理解了这个问题,你只想知道如何在类函数中使用Promises?这是你在找什么?
class Main {
renderDataObject(data) {
/* data will be an array of all resolvedData in the order they were resolved */
}
addSubDataToObject(id, url) {
return new Promise(function(resolve, reject) {
// do work
resolve(/* resolvedData? */);
});
}
}
let main = new Main();
let promises = [];
promises.push(main.addSubDataToObject(id_1, url_1));
promises.push(main.addSubDataToObject(id_2, url_2));
Promise.all(promises).then(main.renderDataObject);