我有以下情况:
我使用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
?
答案 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];
});