OCPromise
安装
OCPromise 可通过 CocoaPods 获得。要安装它,只需将以下行添加到 Podfile 中
pod 'OCPromise'
手动
OCPromise 初始化
初始化一个 promise 对象有两种方式
OCPromise *promise1 = Promise(^(resolve _Nonnull resolve, reject _Nonnull reject) {
resolve(@"great");
});
OCPromise *promise2 = function(^OCPromise * _Nullable(id _Nonnull value) {
return Promise(^(resolve _Nonnull resolve, reject _Nonnull reject) {
resolve(value);
});
});
promise2 将收到最后一个 promise 的解决值,因此 promise2 不能是链的头部。
如何使用 promise 链式调用
promise1
.then(promise2)
.then(function(^OCPromise * _Nullable(id _Nonnull value) {
NSLog(@"got value %@", value);
return nil;
})).catch(function(^id _Nullable(id _Nullable value) {
NSLog(@"catch error");
return nil;
})).finally(^{
NSLog(@"finally");
});
OCPromise.all
OCPromise *tast1 = Promise(^(resolve _Nonnull resolve, reject _Nonnull reject) {
resolve(@"task1");
});
OCPromise *task2 = Promise(^(resolve _Nonnull resolve, reject _Nonnull reject) {
resolve(@"task2");
});
OCPromise.all(@[tast1, task2]).then(function(^OCPromise * _Nullable(NSArray * values) {
NSLog(@"got value %@", values);
return nil;
}));
OCPromise.race
OCPromise.race(@[tast1, task2]).then(function(^OCPromise * _Nullable(id _Nonnull value) {
NSLog(@"got value %@", value);
return nil;
}));
map
tast1.map(^id _Nullable(id _Nonnull value) {
return [value stringByAppendingString:@" maped"];
}).then(function(^OCPromise * _Nullable(id _Nonnull value) {
NSLog(@"got value %@", value);
return nil;
}));
OCPromise.map(@[tast1, task2], ^id _Nullable(id _Nonnull value) {
return [value stringByAppendingString:@" maped"];
}).then(function(^OCPromise * _Nullable(NSArray *values) {
NSLog(@"got value %@", values);
return nil;
}));
deliverOnMainThread
tast1.deliverOnMainThread(^(id _Nonnull value) {
NSLog(@"got value on main thread %@", value);
});