إضافة مهلة للمكالمات غير المتزامنة في Java
-
21-12-2019 - |
سؤال
ليس سؤال Firebase فقط، ولكنني أستخدم Firebase لنشر منشورات إلى الواجهة الخلفية من Android وتشغيله 10 مرات، مرة كل ثانية.
Firebase ref = new Firebase(URL);
ref.child("Time").setValue(Currentime());
لكن هذه مكالمة غير متزامنة وعندما أضع حلقة زمنية:
while (time_now < time_start + 10 seconds) {
Firebase ref = new Firebase(URL);
ref.child("Time").setValue(Currentime());
}
يبدو أنه يتم تشغيل حلقة while أولاً ثم ~10 مكالمات Firebase في النهاية.هل هناك طريقة لإضافة مهلة بحيث تفرض تشغيل المكالمات غير المتزامنة (Firebase) لمدة ثانية قبل الاتصال بالمكالمة غير المتزامنة التالية؟
المحلول
إذا نظرت إلى مثال جافا على موقع ويب Firebase, ، سترى أنه يحتوي على doTransactions
طريقة و onComplete
طريقة:
Firebase countRef = new Firebase(URL);
Transaction.Handler handler = new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData currentData) {
// set the new time
...
}
@Override
public void onComplete(FirebaseError error, boolean committed, DataSnapshot currentData) {
if (error != null) {
...
} else {
if (!committed) {
...
} else {
// transaction committed, do next iteration
...
}
...
}
}
});
countRef.runTransaction(handler);
لذلك قمت بتعيين الوقت الجديد في doTransaction
طريقة:
// set the new time
currentData.setValue(time_now);
return Transaction.success(currentData);
ثم ابدأ التكرار التالي في onComplete
طريقة.
// transaction committed, do next iteration
if (time_now < time_start + 10 seconds) {
countRef.runTransaction(handler);
}
لا تنتمي إلى StackOverflow