首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PromiseKit中的承诺链

PromiseKit中的承诺链
EN

Stack Overflow用户
提问于 2015-10-08 18:14:20
回答 1查看 793关注 0票数 0

我有以下情况:

  1. 从服务器请求一个令牌
  2. 执行请求,即getAllNews
  3. 解析请求getAllNews的响应
  4. 持久化分析的数据
  5. 删除请求的令牌

我用诺言做了这5次手术:

代码语言:javascript
复制
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调用为then,但只有在上一次操作解析为实际结果而不是错误时,它才会执行操作。我应该销毁令牌,不管请求的结果是什么,也不管它是否成功执行。

是否有一种方法可以设置这样一种规则:如果执行了createToken,那么无论如何都应该调用deleteToken,但只在执行正常的请求getAllNews之后才调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-10 19:02:32

在闭包中捕获令牌,以便在finally子句中访问它:

代码语言:javascript
复制
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];
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33023099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档