public Observable<Item> get() {
return idApi.get().flatMap(new Function<List<String>, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(@NonNull List<String> ids) throws Exception {
return Observable.fromIterable(ids);
}
}).flatMap(new Function<String, ObservableSource<Item>>() {
@Override
public ObservableSource<Item> apply(@NonNull final String id) throws Exception {
return dataApi.get(id).map(new Function<Data, Item>() {
@Override
public Item apply(@NonNull Data data) throws Exception {
return new Item(data , id);
});
}
});
}
RxView.clicks(view.findViewById(R.id.button_more)).debounce(500, TimeUnit.MILLISECONDS);
解决这个问题的唯一方法是使用subject
并持有一个对ids列表的引用,这不是优雅的,也不是被动的。
编辑:这是我到目前为止的解决方案,但我不得不订阅直接触发事件。我不认为它优雅。
@Override
public Observable<Item> get(final Observable<Object> trigger) {
final PublishSubject<Item> subject = PublishSubject.create();
return idApi.get().flatMap(new Function<List<String>, ObservableSource<Queue<String>>>() {
@Override
public ObservableSource<Queue<String>> apply(@NonNull List<String> ids) throws Exception {
final Queue<String> q = new LinkedList<>(ids);
return Observable.just(q);
}
}).flatMap(new Function<Queue<String>, ObservableSource<Item>>() {
@Override
public ObservableSource<Item> apply(@NonNull final Queue<String> ids) throws Exception {
trigger.subscribeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Object>() {
@Override
public void accept(@NonNull Object o) throws Exception {
if (ids.size() > 0) {
final String id = ids.poll();
dataApi.get(id).map(new Function<Data, Item>() {
@Override
public Item apply(@NonNull Data data) throws Exception {
return new Item(data, id) l
}
}).subscribe(new Consumer<Item>() {
@Override
public void accept(@NonNull Item item) throws Exception {
subject.onNext(item);
}
});
} else {
subject.onComplete();
}
}
});
return subject;
}
});
}
使用拉链
public Observable<Item> get(View v) {
return idApi.get().flatMap(new Function<List<String>, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(@NonNull List<String> ids) throws Exception {
return Observable.fromIterable(ids);
}
}).zipWith(RxView.clicks(v).debounce(500, TimeUnit.MILLISECONDS), (n, i) -> n))
.flatMap(new Function<String, ObservableSource<Item>>() {
@Override
public ObservableSource<Item> apply(@NonNull final String id) throws Exception {
return dataApi.get(id).map(new Function<Data, Item>() {
@Override
public Item apply(@NonNull Data data) throws Exception {
return new Item(data , id);
});
}
});
}
每次单击获取N项
public Observable<Item> getN(View v, int nitems) {
return idApi.get().flatMap(new Function<List<String>, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(@NonNull List<String> ids) throws Exception {
return Observable.fromIterable(ids);
}
}).buffer(nitems).zipWith(RxView.clicks(v).debounce(500, TimeUnit.MILLISECONDS), (n, i) -> n))
.flatMap(new Function<List<String>, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(@NonNull final List<String> ids) throws Exception {
return Observable.from(ids)
}
}
)
.flatMap(new Function<String, ObservableSource<Item>>() {
@Override
public ObservableSource<Item> apply(@NonNull final String id) throws Exception {
return dataApi.get(id).map(new Function<Data, Item>() {
@Override
public Item apply(@NonNull Data data) throws Exception {
return new Item(data , id);
});
}
}
});
}
编辑:您仍然必须使用subscribeOn来确保您在rxview.clicks的主线程上,以及在任何网络的IO线程上。
出于性能的考虑,我们会对模块和组件进行按需加载。 按需加载组件 通过 umi/dynamic 接口实现,比如: import dynamic from 'umi/dynamic'; const delay = (timeout) => new Promise(resolve => setTimeout(resolve, timeout)); const App = dynamic({ loa
我需要帮助。我正在创建一个项目,但在使用模板时遇到问题。我为标题和菜单创建了一个组件。菜单是一个侧边栏,在打开页面时隐藏。只有在登录后,菜单才会出现。但是javascript在那之后就不起作用了。 每当我进入登录屏幕时,我都会隐藏导航栏和侧边栏,当它出现并再次显示时,脚本将不再工作。当我去查看检查器时,脚本从元素中消失。
问题内容: 是否可以丢弃已加载的Image内容并稍后再次加载?是否可以按需加载? 我可以让ImageView仅在演出时加载图像吗? 问题答案: 不,合同中没有这种功能。图像可以在后台加载,但是一旦加载,就无法卸载。 如果使用,那么您应该显式分配它,但是JavaFX没有提供让您知道实际显示时间的方式。 要实现接近所需的功能,我将其分叉,并通过包括类充分利用了已弃用的API 。
本文向大家介绍什么是按需加载?相关面试题,主要包含被问及什么是按需加载?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 当用户触发了动作时才加载对应的功能。触发的动作,是要看具体的业务场景而言,包括但不限于以下几个情况:鼠标点击、输入文字、拉动滚动条,鼠标移动、窗口大小更改等。加载的文件,可以是JS、图片、CSS、HTML等。
本文向大家介绍react-router实现按需加载,包括了react-router实现按需加载的使用技巧和注意事项,需要的朋友参考一下 本文使用的 React-router 版本为 2.8.1 React Router自己就有一套按需加载解决方案,将代码拆分成多个小包,在浏览过程中实现按需加载; 如过你的项目搭配了webpack打包工具,那么需要在webpack.config.js的output内
问题内容: 我将log4j2.xml配置文件设置为每30秒检查一次: 是否可以以编程方式告诉log4j2检查配置中的更改而不是超时? 注意: 我不想以编程方式加载指定配置文件的配置,我只想告诉log4j2检查MonitorInterval过期之前已加载的配置文件。 谢谢! 问题答案: 看来我找到了解决方案: 有人看到任何错误/副作用吗?