사용자가 새로 고침을 시도 할 때 트리거되는 동기화 서비스를 개발하려고합니다. 이 동기화 서비스는 서버에 대한 여러 요청을 수행합니다. 모든 API 호출이 완료된 후 수동으로 PromiseKit
약속을 트리거 할 수 있습니까? 약속의 콜백은 즉시 호출됩니다. 난 당신이 상쾌 종료하고 모든 syncService 호출을 실행 한 후있는 tableView를 업데이트해야 할 일의 예를 제공 한 아래PromiseKit을 사용하여 Promise에서 Swift 3을 수동으로 트리거하는 방법
//MyViewController.swift
func refresh(sender: AnyObject){
var promise = syncService.syncFromServer()
promise.then{ response
//This is called immediately, and I need it to wait until the sync is complete
refreshControl?.endRefreshing()
tableView.reloadData()
}
}
//SyncService.swift
func syncFromServer() -> Promise<AsyncResult>{
let promise = Promise(value: AsyncResult)
var page = 1
//Multiple API calls
//let request1 = ...
//let request2 = ...
//let request3 = ...
//How do I tell the returned promise to trigger the associated callbacks after the last API requests has been completed?
//Another scenario I need to handle is when the amount of requests is not known ahead of time.
while(true){
var response = makeAnApiCall(page)
//if the response body says no more data is available, break out of the while loop, and tell any promise callbacks to execute.
//if(noMoreData){
// how do I perform something like
// promise.complete //This line needs to tell the `then` statement in `MyViewController` to execute.
// break
//}else{
// do something with response data
//}
page = page + 1
}
return promise
}
약속을 수동으로 실행한다는 것은 무엇을 의미합니까? 'Promise'를 올바르게 반환하는 함수를 선언하면'then'을 사용할 때 정상적인 동기 함수와 거의 같은 역할을합니다. 따라서 "콜백"이 즉시 호출되면 함수에 결함이 있습니다. 귀하의 질문에 함수 정의를 포함하십시오. –
@ DávidPásztor,'syncFromServer' 메소드에 설명을 추가했습니다. 미리 요청량을 알 수없는 시나리오가 있습니다. 따라서 응답 결과가 0이라고 말한 후에 실행될 약속을 반환해야합니다. 따라서 결과가 0이라고 판단한 후에는 약속 콜백에 실행을 알리고 while 루프를 중단해야합니다. – Josh