我有以下情况:


从服务器请求令牌
执行一个请求,即getAllNews
解析请求的响应getAllNews
坚持解析的数据
删除请求的令牌


我使用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]调用,但是它只会在前一个解析为实际结果而不是错误的情况下执行操作。
无论请求的结果如何,无论是否成功执行,我都应销毁令牌。

有没有办法设置一个规则,如果执行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];
});

10-07 14:28