統計情報(30日間)


最新情報をツイート


人気の投稿

PromiseのiOS実装

このエントリーをはてなブックマークに追加

複数の非同期処理を順番に実行したい時に便利なライブラリ。

これが

id q1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
id q2 = [NSOperationQueue new];
dispatch_async(q1, ^{
    id md5 = md5(email);
    id url = [@"http://gravatar.com/" stringByAppendingString:md5];
    id rq = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    [NSURLConnection sendAsynchronousRequest:rq queue:q2
                           completionHandler:^(id rsp, id data, id err) {
        UIImage *gravatarImage = [UIImage imageWithData:data];
        dispatch_async(dispatch_get_main_queue(), ^{
            self.imageView.image = gravatarImage;
        });
    }];
});

こんな感じで書ける
#import "PromiseKit.h"

dispatch_promise(^{
    return md5(email);
}).then(^(NSString *md5){
    return [NSURLConnection GET:@"http://gravatar.com/%@", md5];
}).then(^(UIImage *gravatarImage){
    self.imageView.image = gravatarImage;
});



いい感じ。

Leave a Reply