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

原文 标签 ios swift promisekit

我有一个名为 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 函数应该再次执行。

最佳答案

代码中发生的行为完全符合预期。鉴于您将链接实例化 4 次,因此第一个作业将被执行这么多次。
相反,您需要以某种方式为 firSTLy 提供一个单一的工作实例。
当前:执行 N 次 { firSTLy + 其余工作 }
预期:首先 + 执行 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 - 无法关闭CNContactViewController

xcode - Xcode在Swift 2.2和Swift 3.0之间切换

ios - 保存 promise 兑现并拒绝 promise 包

ios - UIWebView缓存不适用于NSURLRequestReturnCacheDataElseLoad

ios - 为什么不将值user.username传递给导航器

swift - 如何使用Parse恢复应用内购买?

ios - PromiseKit AnyPromise然后崩溃EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000010

swift - 创建包装可执行代码的void Promise

objective-c - 在UITableView中选择单元格时创建UIWebView

ios - 显示大图像文件时,在viewDidAppear之后调用了DidRecieveMemoryWarning