【问题标题】:Chaining of promises in PromiseKitPromiseKit 中的承诺链
【发布时间】:2016-01-06 12:10:13
【问题描述】:

我有以下场景:

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

我曾考虑在[self performRequestGetAllNewsUsingToken:token] 之后立即将deleteToken 称为then,但它只会在前一个解析为实际结果而不是错误的情况下执行该操作。 无论请求的结果如何,无论它是否成功执行,我都应该销毁令牌。

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

【问题讨论】:

标签: ios objective-c promise promisekit


【解决方案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];
});

【讨论】:

  • 我读到了 disposer 模式,但不知道如何将它应用到我当前的示例中。您能否给我一些有关可能解决方案的更多信息?这将有助于验证令牌是否始终被销毁。
猜你喜欢
  • 2015-12-14
  • 2015-09-05
  • 2016-02-08
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多