我试图链接一些API调用,我认为我混淆了一些概念。希望得到一些澄清和代码样本。
我已经实现了这些功能..。
func promiseFetchPayments(for accountId: String) -> Promise <[OperationResponse]> {
return Promise <[OperationResponse]> { seal in
payments(for: accountId) { (records, error) in
if let recs = records {
seal.resolve(.fulfilled(recs))
return
}
if let e = error {
seal.reject(e)
return
}
}
}
}和
func payments(for accountId: String, completion: @escaping (_ records: [OperationResponse]?, _ error: Error?) -> Void) {
stellar.payments.getPayments(
forAccount: accountId,
order: Order.descending,
limit: 10
) { response in
switch response {
case .success(let paymentsResponse):
DispatchQueue.main.async {
completion(paymentsResponse.records, nil)
}
case .failure(let error):
DispatchQueue.main.async {
completion(nil, error)
}
}
}
}我正试着像这样使用它:
firstly {
promiseFetchPayments(for: "XXX")
}.done { records in
print(records)
} .catch { error in
print(error)
}现在这个^^工作正常!我的问题是,我希望能够将done更改为,然后是,并且能够链接另一个函数/响应,或者更多。
但我不断犯的错误是:
无法与之相适应。
我正在寻找一些非常类似的东西(我知道语法是不正确的,只是在逻辑上遵循链.
firstly {
stellar.promiseFetchPayments(for: "")
}.done { records in
print(records)
}.then {
// call some other method
}.done { data in
// more data
}.catch { error in
print(error)
}这真的有可能吗?似乎无法编译任何关于互联网络的教程。似乎Swift编译器真的不喜欢PMK语法什么的。
有什么想法吗?
发布于 2021-02-08 20:52:30
问题在于,您正在将done链接起来,这并不是说您正在尝试从它中调用then。
相反,您需要保存承诺,并将其用于后面的调用。你可以这样做:
let promise = firstly {
stellar.promiseFetchPayments(for: "")
}
promise.done { records in
print(records)
}
promise.then {
// call some other method
}.done { data in
// more data
}.catch { error in
print(error)
}您甚至可以从要在其他地方使用的方法返回该承诺,或者将其传递给其他方法。
https://stackoverflow.com/questions/66104703
复制相似问题