首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PromiseKit 6 iOS链

PromiseKit 6 iOS链
EN

Stack Overflow用户
提问于 2021-02-08 15:40:02
回答 1查看 53关注 0票数 0

我试图链接一些API调用,我认为我混淆了一些概念。希望得到一些澄清和代码样本。

我已经实现了这些功能..。

代码语言:javascript
复制
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
                }
            }
        }
    }

代码语言:javascript
复制
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)
                }
            }
        }
    }

我正试着像这样使用它:

代码语言:javascript
复制
firstly {
            promiseFetchPayments(for: "XXX")
        }.done { records in
            print(records)
        } .catch { error in
            print(error)
        }

现在这个^^工作正常!我的问题是,我希望能够将done更改为,然后是,并且能够链接另一个函数/响应,或者更多。

但我不断犯的错误是:

无法与之相适应。

我正在寻找一些非常类似的东西(我知道语法是不正确的,只是在逻辑上遵循链.

代码语言:javascript
复制
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语法什么的。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-08 20:52:30

问题在于,您正在将done链接起来,这并不是说您正在尝试从它中调用then

相反,您需要保存承诺,并将其用于后面的调用。你可以这样做:

代码语言:javascript
复制
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)
}

您甚至可以从要在其他地方使用的方法返回该承诺,或者将其传递给其他方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66104703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档