Javascript 反应-多个图像上载时间错误(Firebase Firestore和Storage)
我在尝试在正确的时间在Firebase Firestore和存储寄存器上注册数据时遇到一些问题 我使用的是React和Firebase,我有一个屏幕,用户可以在其中注册一个球及其信息和图像。一旦用户提示了该信息,我将使用下面的Firebase函数。首先,我注册新创建的数据,获取其ID,然后使用它在存储器中创建路径,然后保存用户上传的图像。Firestore和Storage的数据都在按其应有的方式保存,但计时除外 问题是,我在添加了球的信息之后,直到上传完图像之后,才得到响应。一旦我运行下面的代码,我会在Javascript 反应-多个图像上载时间错误(Firebase Firestore和Storage),javascript,reactjs,firebase,google-cloud-firestore,storage,Javascript,Reactjs,Firebase,Google Cloud Firestore,Storage,我在尝试在正确的时间在Firebase Firestore和存储寄存器上注册数据时遇到一些问题 我使用的是React和Firebase,我有一个屏幕,用户可以在其中注册一个球及其信息和图像。一旦用户提示了该信息,我将使用下面的Firebase函数。首先,我注册新创建的数据,获取其ID,然后使用它在存储器中创建路径,然后保存用户上传的图像。Firestore和Storage的数据都在按其应有的方式保存,但计时除外 问题是,我在添加了球的信息之后,直到上传完图像之后,才得到响应。一旦我运行下面的代码
console.log(resultCheck)
(这是一个承诺)所在的位置和console.log(快照)之前立即得到响应代码>。我需要同时返回两个响应,但找不到正确的异步时间
async registerBall(ball, images) {
let result = await this.firebase.firestore()
.collection("balls")
.add(ball)
.then(async function(ballResult) {
if (images.length > 0) {
var storageRef = firebase.storage().ref();
let imageUploadResult = await images.map(async image => {
let uploadTask = await storageRef
.child("images/balls/" + ballResult.id + "/" + image.name)
.put(image.file, { contentType: image.file.type })
.then(snapshot => {
console.log(snapshot);
return { isError: false };
})
.catch(error => {
return { isError: true, errorMessage: error };
});
return uploadTask;
});
let resultCheck = { isError: false };
imageUploadResult.forEach(result => {
if (result.isError) {
return (resultCheck = {
isError: true,
errorMessage: result.errorMessage
});
}
});
console.log(resultCheck);
return resultCheck;
} else {
return { isError: false };
}
})
.catch(function(error) {
return { isError: true, errorMessage: error };
});
return result;
}
谢谢你的帮助 此问题可能是您在上载时试图等待您的图像。map
实际上返回了一系列承诺。要等待所有这些,您可以使用Promise.all
,即:
const imageUploadPromises = images.map(async image => {...
然后:
我已经设法把所有的承诺都变成了承诺。不遵守每一个承诺是错误的。谢谢
const imageUploadResults = await Promise.all(imageUploadPromises);