1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #import "FBLPromise+Race.h"
- #import "FBLPromise+Async.h"
- #import "FBLPromisePrivate.h"
- @implementation FBLPromise (RaceAdditions)
- + (instancetype)race:(NSArray *)promises {
- return [self onQueue:self.defaultDispatchQueue race:promises];
- }
- + (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)racePromises {
- NSParameterAssert(queue);
- NSAssert(racePromises.count > 0, @"No promises to observe");
- NSArray *promises = [racePromises copy];
- return [FBLPromise onQueue:queue
- async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) {
- for (id promise in promises) {
- if (![promise isKindOfClass:self]) {
- fulfill(promise);
- return;
- }
- }
-
-
- for (FBLPromise *promise in promises) {
- [promise observeOnQueue:queue fulfill:fulfill reject:reject];
- }
- }];
- }
- @end
- @implementation FBLPromise (DotSyntax_RaceAdditions)
- + (FBLPromise * (^)(NSArray *))race {
- return ^(NSArray *promises) {
- return [self race:promises];
- };
- }
- + (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn {
- return ^(dispatch_queue_t queue, NSArray *promises) {
- return [self onQueue:queue race:promises];
- };
- }
- @end
|