PromiseKit 中的承诺链接

Chaining of promises in PromiseKit

我有以下场景:

  1. 从服务器请求令牌
  2. 执行请求,即getAllNews
  3. 解析请求getAllNews的响应
  4. 保留已解析的数据
  5. 删除请求的令牌

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

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

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

在闭包中捕获令牌,以便您可以在 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];
});