На дворе без малого 2015 год, а люди все еще используют VC6 (прислали сделанное тестовое).
2014-12-25
2014-12-04
Callbacks vs promises
Добавил в текущий проект промисы. Для сравнения
До:
После
Промисы свои, написал часа за 3-4. Смотрел RXPromise и PromiseKit, но они не умеют то, что мне нужно.
До:
-(void) p_pluckHamsSinceLastPluckWithCompletion:(BarPluckHamsCompletion) completion { NSDate * date = [NSUserDefaults standardUserDefaults].lastPluckDate; XXXHamPlucker plucker = ^(XXXPluckSession * session, XXXFoo *foo, XXXPluckConsumer consumer) { [session searchBoosSinceDate:date withFoo:foo completion:^(NSError *error, NSIndexSet * boos) { if (error) return consumer(error, nil); [Bar filterBoos:boos withFoo:foo completion:^(NSIndexSet *boos) { [session pluckHamsWithBoos:boos withFoo:foo completion:^(NSError * error, NSArray * hams) { if (error) return consumer(error, nil); [Bar filterHams:hams inFoo:foo completion:^(NSArray *hams) { consumer(nil, hams); }]; }]; }]; }]; }; [self p_pluckHamsUsingPlucker:plucker completionHandler:completion]; }
После
-(XXXPromise *) p_pluckHamsSinceLastPluck { NSDate * date = [NSUserDefaults standardUserDefaults].lastPluckDate; XXXHamPlucker plucker = ^(XXXPluckSession * session, XXXFoo * foo) { XXXPromise * promise = [session searchBoosSinceDate:date withFoo:foo]; return promise.thenPromise(^(NSIndexSet * boos){ return [Bar filterBoos:boos withFoo:foo]; }).thenPromise(^(NSIndexSet * boos){ return [session pluckHamsWithBoos:boos withFoo:foo]; }).thenPromise(^(NSArray * hams) { return [Bar filterHams:hams withFoo:foo]; }); }; return [self p_pluckHamsUsing:plucker]; }
Промисы свои, написал часа за 3-4. Смотрел RXPromise и PromiseKit, но они не умеют то, что мне нужно.
Подписаться на:
Сообщения (Atom)