我的同事和我正在构建一个基于PromiseKit v1.5.3 的异步数据层。我们注意到,在某些情况下,当从传递给的块返回一个承诺(称为 X)时then
,下一个then
块实际上将 Promse X 作为参数传递给该块,而不是前一个承诺实际解析为的参数。对于大多数 Promise 实现来说,链接 thenable Promise 是一个非常重要的特性,所以我们非常惊讶。
经过一些相当长的调试会话后,我们发现问题出在 PromiseKit 中。在解析过程中,IsPromise
调用未能将对象识别为promise,这实际上是一个简单的调用
[result isKindOfClass:[PMKPromise class]]
此调用返回nil
,并执行了不正确的分支。这是来源
令人费解的是,我认为没有任何理由发生这种情况。我不认为这是 PromiseKit 中的错误,因为他们的代码似乎是正确的。我已经确认底层对象确实是一个 PMKPromise,因为它响应诸如value
和之类的 promise 方法fulfilled
。我什至使用调试器将它推过正确的分支,并从那里正确执行!
鉴于isKindOfClass
正在返回nil
,听起来该对象没有响应消息......但它肯定是一个 NSObject。我很好奇这是否可能是一个奇怪的编译器设置或其他东西。如果相关,我目前将优化设置为无。有没有人见过这样的事情或知道发生了什么?我应该检查什么?