一旦获取所有URL并将其添加到对象mapGeometry中,我将使用下面的异步代码获取URL数组。我需要从函数returnMapGeometry返回mapGeometry,因此所有代码都需要暂停直到执行。
我在正确使用语法时遇到了很多麻烦,一旦所有获取均已解决且每个mapGeometryPiece已添加到mapGeometry中,如何返回mapGeometry?
function returnMapGeometry() {
var mapGeometry = new THREE.Group();
Promise.all(
urls.map((url, index) => fetch(new Request(url))
.then(response => response.blob())
.then(blob => doSomeWork(URL.createObjectURL(blob))
.then(mapGeometryPiece => {
mapGeometry.add(mapGeometryPiece)
})
))
}
// code must pause until returnMapGeometry() returns
mapGeometry = returnMapGeometry()
注意:mapGeometry是Three.js组-我认为这没有什么区别,请参见:https://threejs.org/docs/#api/objects/Group
最佳答案
您需要在.then
上链接并返回一个Promise.all
,该mapGeometry
可以使用您构造的returnMapGeometry
进行解析,然后在调用mapGeometry
时,它将使用Promise
进行解析。因为它需要返回一个mapGeometry
而不是实际的getMapGeometry
,所以调用该函数稍有不同(例如.then
)会更有意义。
您还可以删除doSomeWork
上不必要的嵌套,以使代码更加扁平:
function getMapGeometry() {
var mapGeometry = new THREE.Group();
return Promise.all(
urls.map((url, index) => fetch(new Request(url))
.then(response => response.blob())
.then(blob => doSomeWork(URL.createObjectURL(blob))
.then(mapGeometryPiece => mapGeometry.add(mapGeometryPiece))
))
)
.then(() => mapGeometry);
// code must pause until returnMapGeometry() returns
}
getMapGeometry()
.then((mapGeometry) => {
// do stuff with mapGeometry
});
关于javascript - 从包含promise.all的函数返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51054124/