ios - 如何在 PromiseKit 6 中使用循环?

标签 ios swift promisekit

我有一个名为 chaining 的函数,它链接多个 promise,我想多次调用该函数。为此,我正在使用 for 循环,我希望它具有索引 0chaining 函数应该使用索引 0 执行。(我有一组属性ListingArray[],我想在循环的一次迭代中使用 ListingArray[0],在其他迭代中使用 ListingArray[1],依此类推。

这是我的链接函数:

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,函数应该再次执行。

最佳答案

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

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

当前:执行 N 次 {首先 + 其余工作 }

预期:首先+执行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) }

关于ios - 如何在 PromiseKit 6 中使用循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62871592/

相关文章:

ios - Firebase - 将所有子键和子值检索到 Swift 中的单独数组中

swift - PromiseKit 在链接之前解包可选

swift - 如何利用 PromiseKit 确保在继续之前检索到查询的对象?

ios - 来自 NSData 的 NSString 为 nil

swift - 将应用程序下载与设备关联? ( swift )

ios - 连接到已经初始化的 View Controller

ios - 没有这样的文件位置 - 将图像从 Swift 上传到 S3

ios - 链接多个 Alamofire 请求

ios - 通过桥接头从 SWIFT 调用 objective-c 函数

ios - 单击按钮时在 tableViewCell 中配置数据