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参数丢失。

我考虑过在 , 之后立即调用deleteTokenthen[self performRequestGetAllNewsUsingToken:token]只有在前一个解析为实际结果而不是错误时才会执行操作。无论请求的结果如何,无论它是否成功执行,我都应该销毁令牌。

有没有办法设置一个规则,如果createToken执行,那么deleteToken无论如何都应该调用,但只有在执行我的正常请求之后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 回答