如何使用 PromiseKit 手动触发 Swift 3 中的 Promise
How to manually trigger Promise in Swift 3 with PromiseKit
我正在寻求开发一种同步服务,该服务在用户拉动刷新时触发。此同步服务将对服务器执行多个请求。如何在每次 API 调用完成后手动触发 PromiseKit
承诺?立即调用承诺的回调。
//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
}
下面我提供了一个示例,说明在所有 syncService 调用 运行 之后,您应该如何结束刷新和更新 tableView。查看有关使用 'when'.
的 PromiseKit 文档
func refresh(sender: AnyObject){
syncService.syncFromServer().then { response in
refreshControl?.endRefreshing()
tableView.reloadData()
}
}
//SyncService.swift
func syncFromServer() -> Promise<Void> {
let request1 = methodReturningPromise1()
let request2 = methodReturningPromise2()
return when(fulfilled: [request1, request2])
}
private func methodReturningPromise1() -> Promise<Void> {
return syncService.someDataCall().then { response -> Void in
//do something here
}
}
我正在寻求开发一种同步服务,该服务在用户拉动刷新时触发。此同步服务将对服务器执行多个请求。如何在每次 API 调用完成后手动触发 PromiseKit
承诺?立即调用承诺的回调。
//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
}
下面我提供了一个示例,说明在所有 syncService 调用 运行 之后,您应该如何结束刷新和更新 tableView。查看有关使用 'when'.
的 PromiseKit 文档func refresh(sender: AnyObject){
syncService.syncFromServer().then { response in
refreshControl?.endRefreshing()
tableView.reloadData()
}
}
//SyncService.swift
func syncFromServer() -> Promise<Void> {
let request1 = methodReturningPromise1()
let request2 = methodReturningPromise2()
return when(fulfilled: [request1, request2])
}
private func methodReturningPromise1() -> Promise<Void> {
return syncService.someDataCall().then { response -> Void in
//do something here
}
}