iOS(ObjC)PromiseKit - 在承诺中返回承诺

Posted

技术标签:

【中文标题】iOS(ObjC)PromiseKit - 在承诺中返回承诺【英文标题】:iOS (ObjC) PromiseKit - Return promise within promise 【发布时间】:2016-07-19 23:10:31 【问题描述】:

我正在尝试通过一些在每个级别添加功能的类来级联承诺。

+ (AnyPromise *) method 
    return [SomeClass whichReturnsPromise]
    .then(^(id obj)
        // do stuff
        return obj;
    );
  

不幸的是,这段代码在第二行抛出了一个错误:

exc_bad_access (code=1 address=0x10)

(注意:只需调用return [SomeClass whichReturnsPromise] 即可)

我已经搜索了 *** 的答案并尝试了上述代码的许多变体(可以在 javascript 中使用),但我一直收到同样的错误。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

原来[SomeClass which ReturnsPromise] 的中断案例在转换为返回承诺之前返回nil。将其更改为返回值为nil 的承诺。现在可以使用了。

【讨论】:

【参考方案2】:

未经测试,我认为以下应该可以工作:

[self wait].then(^
   return [SomeClass whichReturnsPromise];
).then(^(id obj) 
   return obj;
);

我知道下面是 Swift,但如果你有一个 AnyPromise,你可以在 Promise<T> 链中使用它:

someSwiftPromise().then  _ -> AnyPromise in
   // provided by `pod PromiseKit/SystemConfiguration`
   return SCNetworkReachability()
.then  (obj: AnyObject?) in
   // AnyPromise always resolves with `AnyObject?`

【讨论】:

[self wait] 来自哪个班级?我在自定义类上调用我的。 哦,如果你在return [SomeClass whichReturnsPromise] 中添加一个分号; 会发生什么。你也遇到同样的错误吗? 你的意思是如果我去掉.then 子句?没有错误。

以上是关于iOS(ObjC)PromiseKit - 在承诺中返回承诺的主要内容,如果未能解决你的问题,请参考以下文章

如果一个已经在运行的 PromiseKit 承诺返回一个未决的承诺的最佳 Swift 模式是啥?

如何使用 PromiseKit 重构快速回调以承诺

返回使用另一个 PromiseKit 承诺的承诺

PromiseKit 分支承诺

自己的 Promisekit 承诺没有正确响应

PromiseKit - 带有重新加载第一个承诺的可选承诺