Как выполнить задачу Firebase Storage Task и Firestore одновременно? - PullRequest
0 голосов
/ 05 ноября 2018

Я использую:

ref.putFile(file).addOnSuccessListener(taskSnapshot -> {
    ref.getDownloadUrl().addOnSuccessListener(uri -> {
        String downloadUrl = uri.toString();

        Map<String, Object> map = new HashMap<>();
        map.put("profilePic", downloadUrl);
        uidDocRef.update(map);
    });
});

Чтобы загрузить изображение в Firebase Storage. После успешного добавления я использую downloadUrl для обновления профиля пользователя.

Проблема заключается в том, что при попытке записи в Firestore возникает ошибка. Изображение добавляется, но соответствующий URL нет. Я хотел бы сделать что-то вроде одновременных обновлений, которые сделаны атомарными: либо все обновления завершаются успешно, либо все обновления не выполняются. Как это сделать?

1 Ответ

0 голосов
/ 05 ноября 2018

Эти операции охватывают разные сервисы, возможно, даже разные зоны доступности. Нет способа сделать их атомарными.

Хотя вы определенно можете уменьшить риск, приняв совет Али и откатившись от клиента, невозможно сделать эти операции атомарными. Но в какой-то момент произойдет сбой, который клиент не сможет откатить

Наиболее распространенный подход к неизбежным сбоям - сделать ваш код устойчивым к ошибкам последующих операций и периодически выполнять очистку.

Также см .:

...