gpt4 book ai didi

java - 有没有更好的方法将 rxjava 用于多个请求?

转载 作者:行者123 更新时间:2023-11-30 08:14:32 25 4
gpt4 key购买 nike

我是 rxjava 或 rxandroid 的新手,正在寻找处理多个请求的更好方法。我需要从服务器获取 token 并将结果用作参数来进行登录验证,如果它返回成功,则通过 getSessionId 方法获取 sessionId。我已经考虑过 zip 或 merge,但我认为它不会起作用。那么你能给我一个想法或者我不知道,思路吗?谢谢。

这是我的代码:

private void getToken(final String name , final String pwd){
api.newToken()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<TokenModel>() {
@Override public void call(TokenModel tokenModel) {
String token = tokenModel.request_token;
if (!"".equals(token)){
login(token, name, pwd);
}else {
Timber.e("got token failed");
}
}
});
}

private void login(String token, String name, String pwd){
api.validateToken(token, name, pwd)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<TokenModel>() {
@Override public void call(TokenModel tokenModel) {
String token = tokenModel.request_token;
if (!"".equals(token)){
getSessionId(token);
}else {
Timber.e("got token failed");
}
}
});
}

private void getSessionId(String token){
api.newSessionn(token)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<TokenModel>() {
@Override public void onCompleted() {
//go to home activity
}

@Override public void onError(Throwable e) {
//handle error
}

@Override public void onNext(TokenModel tokenModel) {
//store session id
}
});
}

最佳答案

您的第一个订阅调用您的第二个订阅,...
您可以使用 flapmap 运算符避免这种情况。

api.newToken(...)
.flapMap(token -> api.validateToken(token))
.flapMap(token -> api.newSession(token)).subscribe()

订阅中的新可观察对象通常可以由 flatMap 调用替换。

如果你想管理你的错误,在 flatMap 中,如果 token 无效,你可以返回一个错误 observable 而不是返回新的 api 调用 observable。

.flatMap(token -> if(token.isValid){ return api.newCall(); } else { return Observable.error(...); ;)

关于java - 有没有更好的方法将 rxjava 用于多个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29444707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com