Combine 如何在 try-catch 块中工作?
How does Combine work inside try-catch block?
我正在尝试使用 combine 制作一个 try-catch 块,这样我就可以执行某些功能并再次重新执行主块。我正在做这样的事情 -
return urlSession.dataTaskPublisher(for: request)
.tryMap(verifyAPIResponse)
.tryCatch { (error) -> AnyPublisher<(data: Data, response: URLResponse), URLError> in
self.apiCallOne()
.tryMap(\.apiResponse)
.tryMap({ (response) in
})
return self.urlSession.dataTaskPublisher(for: request) //<<- DOES this execute after refreshToken or executes in parallel?
}
.tryMap(parseJson)
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
所以我主要关心的是-
- apiCallOne 发生在它之前 returns self.urlSession.dataTaskPublisher(for: request) or
- API 调用 apiCallOne 是否在后台执行并且 self.urlSession.dataTaskPublisher(for: request) 会立即被 returned?如果是这样,我可以在 apiCallOne 完成后 return 吗?
任何 pointers/help 都很好。
tryCatch 闭包中的函数像任何普通代码一样按顺序执行。首先 apiCallOne()
执行,然后当它 returns tryMap(\.apiResponse)
执行然后 tryMap({ response in })
执行然后 dataTaskPublisher(for:)
执行并且它的值是 returned .
请记住,dataTaskPublisher(for:)
return 立即启动它的发布者,但开始在后台工作。该作品稍后会通过 Publisher 发出一个值。
我预计,根据函数的名称,apiCallOne()
也会立即 returns 但开始在后台工作并在稍后的某个时间发出一个值。这两个 tryMaps 也会立即 return 但是当调用它们的 Publisher 发出值时发出值。
所有这些都对 apiCallOne()
的工作与 dataTaskPublisher(for:)
的工作同时进行产生了影响。
我正在尝试使用 combine 制作一个 try-catch 块,这样我就可以执行某些功能并再次重新执行主块。我正在做这样的事情 -
return urlSession.dataTaskPublisher(for: request)
.tryMap(verifyAPIResponse)
.tryCatch { (error) -> AnyPublisher<(data: Data, response: URLResponse), URLError> in
self.apiCallOne()
.tryMap(\.apiResponse)
.tryMap({ (response) in
})
return self.urlSession.dataTaskPublisher(for: request) //<<- DOES this execute after refreshToken or executes in parallel?
}
.tryMap(parseJson)
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
所以我主要关心的是-
- apiCallOne 发生在它之前 returns self.urlSession.dataTaskPublisher(for: request) or
- API 调用 apiCallOne 是否在后台执行并且 self.urlSession.dataTaskPublisher(for: request) 会立即被 returned?如果是这样,我可以在 apiCallOne 完成后 return 吗?
任何 pointers/help 都很好。
tryCatch 闭包中的函数像任何普通代码一样按顺序执行。首先 apiCallOne()
执行,然后当它 returns tryMap(\.apiResponse)
执行然后 tryMap({ response in })
执行然后 dataTaskPublisher(for:)
执行并且它的值是 returned .
请记住,dataTaskPublisher(for:)
return 立即启动它的发布者,但开始在后台工作。该作品稍后会通过 Publisher 发出一个值。
我预计,根据函数的名称,apiCallOne()
也会立即 returns 但开始在后台工作并在稍后的某个时间发出一个值。这两个 tryMaps 也会立即 return 但是当调用它们的 Publisher 发出值时发出值。
所有这些都对 apiCallOne()
的工作与 dataTaskPublisher(for:)
的工作同时进行产生了影响。