Future은 단일 작업의 결과값을 비동기적으로 생성하고 완료할때까지 기다리는 Publisher에요.
다른 Publisher들과는 달리 비동기 이벤트를 핸들링하기 적합하게 만들어진 Publisher에요.
Promise
형태로 반환해요.여기에서는 실제 네트워킹을 통해 데이터를 불러오고 이 데이터를 Future Publisher에 담아 구독하는 일련의 흐름을 설명할게요.
먼저 Data를 리턴하는 함수를 만들어요.
func fetchUserDataAsync() async throws -> Data {
guard let url = URL(string: "<https://api.publicapis.org/entries>") else {
throw URLError(.badURL)
}
let (data, response) = try await URLSession.shared.data(from: url)
guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
throw URLError(.badServerResponse)
}
return data
}
그리고 Future을 통해 비동기 이벤트의 결과를 전달해요.
Future은 promise라는 클로저를 인자로 넘겨서 개발자가 성공과 실패에 대한 결과값을 이 promise 안에 담을 수 있어요.