У меня есть приложение, которое делает динамические запросы от Retrofit, и я хочу определить, все ли закончены с лучшей практикой, как я знаю, как сделать в javascript с Promise.
В Retrofit сегодня я делаювот так я получаю массив от объектов и сделаю x запрос в зависимости от размера массива.
Поэтому, когда я запускаю функцию, я выбираю размер из массива и каждый раз, когда мой Retrofit делает вызовЯ помещаю в свою переменную successCounter ++ и errorCounter ++ , когда сумма из этих 2 переменных равна размеру моего массива, так что это конец асинхронных функций.
Но я не знаю, еслиЭто хороший пример из моего кода:
String filePath = system.getMp_user_name() + "/categorias/" + mpCategory.getImg();
downloadImage("category", filePath, mpCategory.getImg(),
new SynService.ApiImageCallback() {
public void onResponse(Boolean success, Integer requestCounter, Integer errorRequestCounter){
if(success){
categoryImgSuccessCounter++;
Log.d(TAG, "Imagem baixada e armazenada com sucesso");
if(categoryImgSuccessCounter.equals(arrayCategorySize)) {
HashMap<String, String> responseObj = new HashMap<>();
responseObj.put("success", "1");
responseObj.put("message", "Sincronização Completada com Sucesso");
callback.onResponse(responseObj);
}
} else {
categoryImgErrorCounter++;
Log.d(TAG, "Não foi possível fazer o download da imagem");
HashMap<String, String> responseObj = new HashMap<>();
responseObj.put("success", "0");
responseObj.put("message", "Houve um erro no download das imagens e o processo parou");
callback.onResponse(responseObj);
}
Integer total = categoryImgSuccessCounter + categoryImgErrorCounter;
if(total.equals(arrayCategorySize)) {
categoryImgFinished = true;
}
}
});
Как я могу определить, когда весь запрос от Retrofit завершен без счетчика?
В javascript это просто так:
async function foo(things) {
const results = [];
for (const thing of things) {
// Good: all asynchronous operations are immediately started.
results.push(bar(thing));
}
// Now that all the asynchronous operations are running, here we wait until they all complete.
return baz(await Promise.all(results));
}