0

次のシナリオがあります。

  1. サーバーからトークンをリクエストする
  2. リクエストを実行します。つまり、getAllNews
  3. リクエスト getAllNews のレスポンスを解析する
  4. 解析されたデータを永続化する
  5. 要求されたトークンを削除します

そして、promise を使用して次の 5 つの操作を行います。

return [self createToken].then(^(NSString *token) {
    return [self performRequestGetAllNewsUsingToken:token];
}).then(^(id responseObject) {
    return [self parseNewsResponse:responseObject];
}).then(^(NewsResponseObject *newsResponseObject) {
    return [self persistNewsFromArray:newsResponseObject.allNews inContext:self.context];
}).finally(^{
    [self deleteToken:token];
});

私が直面している問題は、パラメーターを送信できないことです。finallyこのtokenパラメーターがありません。

の直後に,deleteTokenとして呼び出すことを考えましたが、前の操作がエラーではなく実際の結果に解決された場合にのみ操作を実行します。リクエストの結果がどうであれ、リクエストが正常に実行されたかどうかに関係なく、トークンを破棄する必要があります。then[self performRequestGetAllNewsUsingToken:token]

createTokenIfが実行された場合deleteToken、通常の request を実行した後にのみ呼び出す必要があるというルールを設定する方法はありgetAllNewsますか?

4

1 に答える 1

1

クロージャでトークンをキャプチャして、finally 句でアクセスできるようにします。

NSString* token; 
return [self createToken].then(^(NSString *token_) {
    token = *token_;
    return [self performRequestGetAllNewsUsingToken:token];
}).then(^(id responseObject) {
    return [self parseNewsResponse:responseObject];
}).then(^(NewsResponseObject *newsResponseObject) {
    return [self persistNewsFromArray:newsResponseObject.allNews inContext:self.context];
}).finally(^{
    [self deleteToken:token];
});
于 2015-10-10T19:02:32.810 に答える