ref1.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ref2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//do the work
}
});
}
});
就像Parse对Bolts所做的一样,Google也提供了一个任务框架来实现JavaScript的promise。因此,您可以创建一系列任务,而不是嵌套侦听器。
如果所有任务成功执行,结果将发送到AddonSuccessListener
。
如果其中任何一个在用例执行期间失败,序列将被中止,异常被传递给AddonFailureListener
。
public Task<Course> execute() {
return Tasks.<Void>forResult(null)
.then(new GetUser())
.then(new GetCourse());
}
public void updateInBackground() {
Tasks.<Void>forResult(null)
.then(new GetUser())
.then(new GetCourse())
.addOnSuccessListener(this)
.addOnFailureListener(this);
}
@Override
public void onFailure(@NonNull Exception error) {
Log.e(TAG, error.getMessage());
}
@Override
public void onSuccess(Customer customer) {
// Do something with the result
}
现在让我们创建两个continuation
任务,每个任务下载两个:
class GetUser implements Continuation<Void, Task<User>> {
@Override
public Task<User> then(Task<Void> task) {
final TaskCompletionSource<User> tcs = new TaskCompletionSource();
ref1.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onCancelled(DatabaseError error) {
tcs.setException(error.toException());
}
@Override
public void onDataChange(DataSnapshot snapshot) {
tcs.setResult(snapshot.getValue(User.class));
}
});
return tcs.getTask();
}
}
和
class GetCourse implements Continuation<User, Task<Course>> {
@Override
public Task<Course> then(Task<User> task) {
final User result = task.getResult();
final TaskCompletionSource<Course> tcs = new TaskCompletionSource();
ref2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onCancelled(DatabaseError error) {
tcs.setException(error.toException());
}
@Override
public void onDataChange(DataSnapshot snapshot) {
tcs.setResult(snapshot.getValue(Course.class));
}
});
return tcs.getTask();
}
}
根据文档,调用getresult()
并允许RuntimeExecutionException传播已完成任务的失败。
Angular.io API Reference - Angular 2 Reference Material with easy access to different Angular 2 items Angular Style Guide - Opinions from the Angular 2 tea - Official repo for Angular 2 implementation
我有一个Kafka的话题,我正在听。然后将消息内容写入websocket通道,在该通道中我有一个订阅了该通道的SockJS客户机。这很管用。然后我创建了一个新的主题,然后添加了第二个KafKalistener。但是,当调用secong侦听器时,我看到它正在尝试处理/读取与第一个KafkaListener和主题相对应的有效负载,由于它没有被配置为这样做,因此会引发一个MessageConversio
24.8 参考资料与延伸阅读 [1]通过在 /usr/src/kernels/linux-3.10.89 下面的 README 以及“ make help ”可以得到相当多的解释 核心编译的功能:可以用来测试 CPU 性能喔!因为 compile 非常耗系统资源! 2002/05/29:第一次完成 2003/02/11:重新编排与加入 FAQ 2004/06/11:原本的 2.4.xx 版本核心被
23.6 参考资料与延伸阅读 [1]维基百科对 X Window 的介绍:http://en.wikipedia.org/wiki/X_Window_System [2]X Server/X client 与网络相关性的参考图示: http://en.wikipedia.org/wiki/File:X_client_sever_example.svg [3]系统的 man page: man xi
22.7 参考资料与延伸阅读 [1]GNU Privacy Guard (GPG) 官方网站的介绍:http://www.gnupg.org/ RPM 包装文件管理程序:http://www.study-area.org/tips/rpm.htm 中文 RPM HOW-TO:http://www.linux.org.tw/CLDP/RPM-HOWTO.html RPM 的使用:http://lin
21.9 参考资料与延伸阅读 [1]GNU 的 make 网页:http://www.gnu.org/software/make/manual/make.html 几种常见加密机制的全名: md5 (Message-Digest algorithm 5) http://en.wikipedia.org/wiki/MD5 sha (Secure Hash Algorithm) http://en.w