Javascript 我无法返回数组中的图像

Javascript 我无法返回数组中的图像,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,我从firebase中提取图像并放置它们,但在函数结束时没有成功 export const saveImages = async (images) => { let imgs = []; try { images.forEach(image => { const imgRef = storage.ref(`Works_Realized/Images/${image.name}`).put(image);

我从firebase中提取图像并放置它们,但在函数结束时没有成功

export const saveImages = async (images) => {
    let imgs = [];
    try {
        images.forEach(image => {

            const imgRef = storage.ref(`Works_Realized/Images/${image.name}`).put(image);
            imgRef.on(
                "state_changed",
                snapshot => { },
                err => {
                    console.log(err);
                },
                () => {
                    storage
                        .ref('Works_Realized/Images')
                        .child(image.name)
                        .getDownloadURL()
                        .then(imgUrl => {
                            imgs = [...imgs, { name: image.name, url: imgUrl }];
                            // imgs.push({ name: image.name, url: imgUrl });
                            // console.log(imgs);
                        })
                }
            );

        });
        if (imgs.length > 0) {
            return imgs;
        } else {
            return [];
        }
    } catch (e) {
        Swal.fire('Error', e.message, 'error');
    }
}

请有人帮忙,我必须返回一个带有de url图像的数组。

欢迎使用堆栈溢出,本例中的问题是您正在使用承诺获取下载url,但在此之前您将返回imgs数组。在本例中,您可以将每个图像映射到一个promise,并等待promise.all解析所有图像,从而得到预期的数组。如果你不明白承诺,我建议你看。这是修改过的代码

export const saveImages=async(图像)=>{
试一试{
const imgs=wait images.map(异步(图像)=>{
const imgRef=storage.ref(`Works\u/Images/${image.name}`).put(image);
伊姆格雷夫(
“状态已更改”,
快照=>{},
错误=>{
控制台日志(err);
},
() => {
const imgUrl=等待存储
.ref(“作品/图像”)
.child(image.name)
.getDownloadURL();
返回{name:image.name,url:imgUrl}
}
);
});
如果(imgs.length>0){
返回imgs;
}否则{
返回[];
}
}捕获(e){
Swal.fire('Error',例如message,'Error');
}
}

欢迎使用stack overflow,本例中的问题是您正在使用Promissions获取下载URL,但在此之前您将返回imgs数组。在本例中,您可以将每个图像映射到一个promise,并等待promise.all解析所有图像,从而得到预期的数组。如果你不明白承诺,我建议你看。这是修改过的代码

export const saveImages=async(图像)=>{
试一试{
const imgs=wait images.map(异步(图像)=>{
const imgRef=storage.ref(`Works\u/Images/${image.name}`).put(image);
伊姆格雷夫(
“状态已更改”,
快照=>{},
错误=>{
控制台日志(err);
},
() => {
const imgUrl=等待存储
.ref(“作品/图像”)
.child(image.name)
.getDownloadURL();
返回{name:image.name,url:imgUrl}
}
);
});
如果(imgs.length>0){
返回imgs;
}否则{
返回[];
}
}捕获(e){
Swal.fire('Error',例如message,'Error');
}
}

谢谢各位,我了解解决方案谢谢各位,我了解解决方案