【问题标题】:How to use Loop in PromiseKit 6?如何在 PromiseKit 6 中使用循环?
【发布时间】:2020-07-13 08:02:45
【问题描述】:

我有一个名为chaining 的函数,它链接了多个promises,我想多次调用该函数。为此,我使用了for 循环,我希望使用索引0chaining 函数应该使用索引0 执行。(我有一个属性数组ListingArray[],我想使用ListingArray[ 0] 在循环的一次迭代中,ListingArray[1] 在另一次迭代中等等)。

这是我的chaining 函数:

func chaining() {
  
 firstly {
            Promise_getIDOfOwnerFromCollection()
        
 }.then { (IdsInCollection)-> Promise<[String]> in
        
        return self.Promise_getOwnerListings(IDs: IdsInCollection)
            
 }.then { (ownerListings) ->Promise<Void> in

            return self.Promise_getReviews(ListingIDs: ownerListings)
           
 }.done { (arg0) in
            
            
            let () = arg0
            print("Work Done")
            
 }.catch { (error) in
            print("Error is \(error.localizedDescription)")
    }
 }

我正在像这样循环调用该函数。

for Count in 0...4 {
  chaining()
 }

现在的问题是firstly 内部的函数在then 执行之前被立即调用了5 次。我希望序列与Count 0 一样,chaining 函数应该执行一次,然后Count 1,函数应该再次执行。

【问题讨论】:

    标签: ios swift promisekit


    【解决方案1】:

    您的代码中发生的行为完全符合预期。鉴于您将链接实例化 4 次,因此第一个作业将执行这样的次数。

    相反,您首先需要以某种方式提供单个工作实例。

    目前:执行 N 次 { firstly + rest of the job }

    预期:首先 + 执行 N 次 { 其余工作 }

    这里是基于你的代码示例。

    struct Review {
    
    }
    
    func Promise_getReviews(listingIDs ids: [String]) -> Promise<[Review]> {
    
    }
    
    func Promise_getOwnerListings(IDs ids: [String]) -> Promise<[String]> {
    
    }
    
    func chaining(from initialWork: Promise<[String]>) {
        firstly { when(fulfilled: initialWork) }
            .then(Promise_getOwnerListings)
            .then(Promise_getReviews)
            .done { print("Work Done") }
            .catch { print("Error") }
    }
    
    let initialWork = Promise<[String]>(["1","2", "3"])
    
    (0...3).forEach { chaining(from: initialWork) }
    

    【讨论】:

    • 非常感谢您的回复!我是使用promiseKit 的新手,我很难理解你的答案。如果可能的话,请您添加更多详细信息来回答,以便我快速理解并快速奖励您 LOL :)
    • 是的,没问题。基本上我发给你的例子应该完全符合你的意图。我所做的不同之处是为 first 块提供了一个 Promise。为了避免在调用链接时每次迭代都创建“新工作”。这就是为什么如您所见,我正在注入 Promise,以避免在第一次关闭时创建新工作。
    • 关于其余部分,我只是使用 swift 的语法糖,它允许您执行 then(Promise_getOwnerListings) 并且我将比: ``` .then { (IdsInCollection)- > Promise in return self.Promise_getOwnerListings(IDs: IdsInCollection) } ``` 但它们的作用相同。 :)
    • 说的很对。那么Review 结构呢?制作struct背后的逻辑是什么?
    • 没什么特别的 :) 我确实通过阅读此方法签名 (Promise_getReviews) 假设您将收到基于提供的 ID 的评论。然后我确实创建了一个虚拟结构来表示示例。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多