我試圖做到這一點看似瑣碎的事情返回一個承諾:從PromiseKit/Alamofire
static func list() -> Promise<[Activity]> {
let endpoint = "\(self.baseUrl)/v1/activities"
return Promise { fulfill, reject in
self.fetchHeaders { (headers) in
return Alamofire.request(
endpoint,
method: .get,
parameters: nil,
encoding: JSONEncoding.default,
headers: headers
).validate().responseJSON().then() { response in
guard let json = response as? JSON else {
reject(ActivityError.parse("Malformed JSON"))
}
guard let jsonActivities = json["activities"] as? [JSON] else {
reject(ActivityError.parse("Missing field"))
}
var activities: [Activity] = []
for jsonActivity in jsonActivities {
guard let activity = Activity(json: jsonActivity) else {
reject(ActivityError.parse("Unable to parse an Activity object"))
}
activities.append(activity)
}
fulfill(activities)
}.catch { error in
reject(ActivityError.network("HTTP response failure"))
}
}
}
}
然而,編譯器(理所當然)抱怨說:
'後衛的身體可能不告吹,可以考慮使用「迴歸」或「休息」 退出範圍
我明白我需要回報這裏有個承諾。我只是無法弄清楚在reject()和fulfill()調用下放什麼。
這不行,我其實需要在那裏返回一個Promise。返回void不會生成。 – sssilver
爲什麼「那不行」?去試試吧,它會 – redent84
我試過了。注意到我正在使用PromiseKit/Alamofire,並且HTTP響應返回到promise(),它不能只返回一個Void。它需要返回一個Promise。 – sssilver