Computer Language/Dart
[Dart::Stream] listen method
Bull_
2024. 8. 19. 14:45
listen 메소드는 스트림의 이벤트를 "구독(subscribe)"하는 것을 의미하며, 스트림이 데이터를 내보낼 때마다 등록된 콜백 함수가 호출된다. 이것은 스트림이 비동기적으로 데이터를 전달하는 방식이다. 스트림은 다음과 같은 세 가지 유형의 이벤트를 발생시킬 수 있다.
- 데이터 이벤트: 스트림에서 새로운 데이터 조각이 생성되었을 때 호출된다.
- 에러 이벤트: 스트림 처리 중에 오류가 발생하면 호출된다.
- 완료 이벤트: 스트림이 더 이상 이벤트를 생성하지 않을 때 호출된다.
listen 메소드의 기본 구조
stream.listen(
(data) {
// 데이터 이벤트 (기본 이벤트)
},
onError: (error) {
// 에러 이벤트
},
onDone: () {
// 완료 이벤트
},
cancelOnError: false, // 에러 발생 시 스트림을 자동으로 취소할지 여부
);
data: 스트림에서 새로운 데이터 이벤트가 발생할 때 호출되는 콜백 함수, 스트림의 각 데이터 이벤트는 이 콜백 함수에 전달된다.onError: 스트림에서 에러 이벤트가 발생할 때 호출되는 콜백 함수, 이 함수를 통해 발생한 에러를 처리할 수 있다.onDone: 스트림이 완료되었을 때 호출되는 콜백 함수, 더 이상 데이터나 에러 이벤트가 발생하지 않음을 나타낸다.cancelOnError: 이 옵션이true로 설정되면, 에러 이벤트가 발생했을 때 스트림의 구독이 자동으로 취소된다. 기본값은false.
void main() {
// StreamController로 스트림 생성
StreamController<int> controller = StreamController<int>();
// listen 메소드로 스트림 구독
controller.stream.listen(
(data) {
print('Data received: $data');
},
onError: (error) {
print('Error occurred: $error');
},
onDone: () {
print('Stream is done.');
},
cancelOnError: true, // 에러 발생 시 구독을 자동으로 취소
);
// 스트림에 데이터 추가
controller.add(1);
controller.add(2);
controller.addError('An error occurred!');
controller.add(3); // 이 이벤트는 cancelOnError가 true라서 호출되지 않음
// 스트림을 종료
controller.close();
}
# 결과
Data received: 1
Data received: 2
Error occurred: An error occurred!
controller.add(1) 및 controller.add(2) : data 콜백이 호출되어 해당 데이터가 출력된다.controller.addError('An error occurred!') : onError 콜백이 호출되어 에러가 출력된다.cancelOnError: true : 에러 발생 후 스트림의 구독이 취소되고, 이후 추가된 3은 출력되지 않는다.onDone : 스트림이 종료되면 콜백이 호출됩니다.