ユーザーが最新表示に切り替えるときにトリガーとなる同期サービスを開発しようとしています。この同期サービスは、サーバーに対して複数の要求を実行します。すべてのAPI呼び出しが完了した後、どのように手動でPromiseKit
約束をトリガーできますか?約束のコールバックはすぐに呼び出されています。PromiseKitでSwift 3でPromiseを手動で起動する方法
//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'のときに通常の同期関数のように動作するので、 "callbacks"がすぐに呼び出されると、関数に欠陥があります。あなたの質問に関数定義を含めてください。 –
@DávidPásztor、私は 'syncFromServer'メソッドに説明を追加しました。前もってリクエストの量を知らないシナリオがあります。だから私は、結果がゼロであると答えた後に実行する約束を返す必要があります。だから私は結果がゼロであると判断した後、私は約束のコールバックに実行するよう指示し、whileループから抜け出す必要があります。 – Josh