Я пытаюсь обернуть метод Firestore в CompletableEmitter, чтобы иметь возможность вернуть Completable.complete () в случае успеха / завершения и Completable.error () в случае ошибки.
(Задача - это операция Firestore для обновления документа (1 поле в этом документе) в коллекции)
Это - это firestore method
, который я пытаюсь обернуть в Completable , который возвращает Task<Void>
. А вот код, не содержащий его в Completable:
public static Completable updateDocument(DocumentReference ref, Map<String,Object> fieldsAndValues){
ref.update(fieldsAndValues)
.addOnSuccessListener(aVoid -> {
Timber.d("SUCCESS");
}).addOnCompleteListener(task -> {
Timber.d("COMPLETE");
}).addOnFailureListener(e -> {
Timber.d("ERROR");
});
return Completable.complete(); //just for the sake of returning complete to finish the method...
}
Этот код выполняется как должен.
Вот моя попытка обернуть этот код:
public static Completable updateDocument(DocumentReference ref, Map<String,Object> fieldsAndValues){
return Completable.create(emitter -> ref.update(fieldsAndValues)
.addOnSuccessListener(aVoid -> emitter.onComplete())
.addOnCompleteListener(task -> emitter.onComplete())
.addOnFailureListener(emitter::onError));
}
В то время как первый выполняется успешно (вызван onSuccess, документ в Firestore обновлен), свернутый код никогда не достигает onSuccess из Задачи (onSuccess никогда не достигался, документ никогда не обновлялся в Firestore). Но он не выдает никаких ошибок, Задача завершается, но никогда не достигает успеха.
Я не понимаю этого поведения. Какие-либо предложения? Что я тут не так делаю?