gpt4 book ai didi

ios - PromiseKit 无法在链中捕获

转载 作者:行者123 更新时间:2023-11-28 05:48:16 27 4
gpt4 key购买 nike

我目前正在混合使用 SwiftyStoreKit 和 PromiseKit 以处理应用内购买,我遇到的问题/问题是在 promise 链中,如果我在其中一个中抛出错误,则 catch block 不是当 reject() 函数被调用时被执行/命中。

关于我如何链接这些 promise ,您可以在下面看到。

     firstly {
IAPViewModel.retrieveIAPProducts()
}.then { products in
IAPViewModel.purchase(products[1])
}.ensure {
// This is to silence the warning of values being unused
_ = IAPViewModel.validatePurchases()
}.catch { error in
UIAlertController.show(message: "Error - \(error._code): \(error.localizedDescription)")
}

一个围绕 Promise 的函数示例,最好的示例可能是我的购买函数,因为用户可以点击取消,这将引发错误。见下文。

static func purchase(_ product: SKProduct) -> Promise<Void> {

let loftyLoadingViewContentModel = LoftyLoadingViewContentModel(title: "Purchasing".uppercased(), message: "We’re currently processing your\nrequest, for your subscription.")
UIApplication.topViewController()?.showLoadingView(.popOverScreen, loftyLoadingViewContentModel)

return Promise { seal in

SwiftyStoreKit.purchaseProduct(product) { purchaseResult in

switch purchaseResult {
case .success(let product):
if product.needsFinishTransaction {
SwiftyStoreKit.finishTransaction(product.transaction)
}
seal.fulfill()
log.info("Purchase Success: \(product.productId)")
case .error(let error):
UIApplication.topViewController()?.removeLoadingView()
seal.reject(error)
}
}
}
}

我已经放置了一个断点,当我触摸取消时,错误案例被命中,但这不会触发 promise 链中的 catch block 。我似乎无法理解为什么。

最佳答案

设法弄明白了,我必须通过将此参数添加到 block (policy: .allErrors) 来明确设置我希望我的 catch 捕获所有错误。

     firstly {
IAPViewModel.retrieveIAPProducts()
}.then { products in
IAPViewModel.purchase(products[1])
}.ensure {
// This is to silence the warning of values being unused
_ = IAPViewModel.validatePurchases()
}.catch (policy: .allErrors) { error in
UIAlertController.show(message: "Error - \(error._code): \(error.localizedDescription)")
}

关于ios - PromiseKit 无法在链中捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53848744/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com