PromiseKit中承诺的链接

时间:2015-10-08 18:14:20

标签: ios objective-c promise promisekit

我有以下情况:

  1. 从服务器请求令牌
  2. 执行请求,即getAllNews
  3. 解析请求getAllNews
  4. 的响应
  5. 保留已解析的数据
  6. 删除请求的令牌
  7. 我使用promises做了这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],但只有在前一个解析为实际结果而不是错误时才会执行操作。 无论请求的结果是什么,无论是否成功执行,我都应该销毁令牌。

    有没有办法设置一条规则如果执行createToken,那么无论如何都应该调用deleteToken,但只有在执行我的正常请求后getAllNews

1 个答案:

答案 0 :(得分: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];
});