我有以下情况:
从服务器请求令牌
执行一个请求,即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];
});