无法删除 React Firebase 承诺中的多个图像



我基本上试图根据存储在数组中的值中删除存储和数据库中的特定firebase数据。我有一系列对象可以连接一个键(这是用于Firebasestorage和Firebasedatabase,图片名称和文件目的地的子密钥为了将其删除在Firebase存储中。因此,我认为使用循环的使用可以解决问题。这是我到目前为止的代码:

var key, count = 0;
for (key in delArray) {
    if (delArray.hasOwnProperty(key)) {
        count++;
    }
}
for (index = 0; index < count && canProceed; index++) {
    canProceed = false;
    var deletionFileLocation = storageNews.child(newsId + "/" + delArray[index].key + "/" + delArray[index].name);
    deletionFileLocation.delete().then(() => {
        databaseNews.child(newsId).child('thumbnails').child(delArray[index].key).remove().then(() => {
            canProceed = true;
        });
    });
    if (index == delArray.length) {
        console.log('done');
    }
}

此代码的奇怪之处在于,它删除了所有图片(据我所知(的所有图片,但仅在数据库中引用。换句话说,它只会删除DB中的一个孩子。我在这里做错了什么?我需要在异步等待中使用回调吗?如果是这样,我将如何处理?我对反应的新手是新手,而且我似乎不明白我会如何做。

看起来您已经安排了它,以便for循环悬挂该过程,直到remove()中的任何一个承诺可以解决。缺失的概念是Promise.all()

// moved to a promise-returning function so we can see what's going on
function deleteDataAndStorage(newsId, obj) {
    let path = newsId + "/" + obj.key + "/" + obj.name;
    let deletionFileLocation = storageNews.child(path);
    return deletionFileLocation.delete().then(() => {
        return databaseNews.child(newsId).child('thumbnails').child(obj.key).remove();
    });
}

现在循环简单明了。Promise.all()做名字所说的:它可以解决一系列结果,当您通过的所有承诺都解决了。

let promises = [];
for (index = 0; index < count; index++) {
    promises.push(deleteDataAndStorage(newsId, delArray[index]));
}
return Promise.all(promises).then(result => {
    console.log('done');
});

最新更新