我有一个名为 chaining
的函数,它链接多个 promise
,我想多次调用该函数。为此,我正在使用 for
循环,我希望它具有索引 0
,chaining
函数应该使用索引 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/