2

各レベルで機能を追加するいくつかのクラスを通じて、約束をカスケードしようとしています。

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

残念ながら、このコードは 2 行目でエラーをスローしています。

exc_bad_access (code=1 address=0x10)

(注:呼び出すだけでreturn [SomeClass whichReturnsPromise]問題ありません)

私はstackoverflowの回答を精査し、上記のコードのさまざまなバリエーション(javascriptで機能する)を試しましたが、同じエラーが発生し続けます。これを修正するにはどうすればよいですか?

4

2 に答える 2

2

プロミスを返すように変換される前に、for のブレーク ケース[SomeClass which ReturnsPromise]が返されていたことが判明しました。nilvalue で promise を返すように変更しましたnil。今すぐ動作します。

于 2016-07-20T00:19:32.660 に答える
0

テストなしでは、次のように動作するはずです。

[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?`
}
于 2016-07-19T23:18:40.710 に答える