首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rxDart不调用onError

rxDart不调用onError
EN

Stack Overflow用户
提问于 2018-08-31 14:11:33
回答 1查看 1K关注 0票数 1

我试图使用rxDart提出一个简单的后端请求。但是,我面临的问题是,当我得到诸如404这样的http错误时,不会调用onError,但是,可以在onData中提取它。

我对RxJava +改造有一点经验,当出现错误响应时,它可以正常工作,http状态代码onError被调用,可以适当地处理。

1.我做错了什么,或者它是有意的行为?

代码语言:javascript
复制
  Object sendProfileData() {
    Stream<Response> stream = onboardingRepository.createUser(User(name: 'name', surname: 'surname', lat: 1.0, lng: 2.0));
    stream.listen((response) {
      print(response.statusCode);
      setAttributes();
    }, onError: (e) {
      print(e);
    });
  }

OnboardingRepository.dart:

代码语言:javascript
复制
class OnboardingRepository {
  Observable<Response> createUser(User user) {
    return Observable.fromFuture(TMApi.createUser(user));
  }
}

TMApi.dart:

代码语言:javascript
复制
class TMApi {
  static Future<http.Response> createUser(User user) async {
    String url = '$baseUrl/create_user';
    return await http.post(url, body: json.encode(user.toJson()));
  }
}
  1. 在视图中处理事件的最佳方法是什么?如果发生错误,应显示错误,否则应打开新屏幕。sendProfileData()方法将返回一个对象,基于此,我将在视图中执行操作,但这听起来并不像是一个非常优雅的解决方案.
  2. 欢迎任何有关架构的建议:)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-31 16:19:01

dart中的http库的工作方式与Retrofit稍有不同。

只有在出现io错误(套接字错误,没有互联网)时,http.post返回的http.post才会引发异常。

像404这样的服务器响应反映在http.Response中。

我创建了一个简单的方便方法,可以帮助您:

代码语言:javascript
复制
void throwIfNoSuccess(http.Response response) {
  if(response.statusCode < 200 || response.statusCode > 299) {
    print('http error!');
    print(response.body);
    throw new HttpException(response);
  }
}

class HttpException implements Exception {
  HttpException(this.response);

  http.Response response;
}

使用方法:

代码语言:javascript
复制
import 'dart:convert';
import 'package:http/http.dart' as http;

Future<UserProfile> getUserProfile(String userId) async {
  final url = 'https://example.com/api/users/$userId';

  final response = await http.get(url);

  throwIfNoSuccess(response);

  final jsonBody = json.decode(response.body);

  return UserProfile.fromJson(jsonBody);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52117308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档