KSDeferred 0.3.4

KSDeferred 0.3.4

测试已测试
Lang语言 Obj-CObjective C
许可协议 MIT
发布最新发布2017年10月

Kurtis Seebaldt 维护。



  • Kurtis Seebaldt

受 CommonJS Promises/A 规范启发的异步库

http://wiki.commonjs.org/wiki/Promises/A

安装

通过 CocoaPods

pod 'KSDeferred'

示例

创建一个承诺

	[KSPromise promise:^(resolveType resolve, rejectType reject) {
        [obj doAsyncThing:^(id value, NSError *error) {
			if (error) {
				reject(error);
			} else {
				resolve(value);
			}
		}];
    }];

创建一个已解析的承诺

    KSPromise<NSString *> *promise = [KSPromise resolve:@"A"];

创建一个拒绝的承诺

    KSPromise<NSString *> *promise = [KSPromise reject:[NSError errorWithDomain:@"error" code:1 userInfo:nil]];

向承诺添加回调

    [promise then:^id(id value) {
        .. do something ..
        return value;
      } error:^id(NSError *e) {
        .. handle error ..
        return e;
    }];

仅需要一个回调时的快捷方法

    [promise then:^id(id value) {
        .. do something ..
        return value;
    }];

    [promise error:^id(NSError error) {
        .. do something ..
        return error;
    }];

承诺链

    KSPromise *step1 = [KSPromise promise:^(resolveType resolve, rejectType reject) {
        [obj doAsyncThing:^(id value, NSError *error) {
			if (error) {
				reject(error);
			} else {
				resolve(value);
			}
		}];
    }];

    KSPromise *step2 = [step1 then:^id(id value) {
        # value is value returned from first promise
		return [obj doSomethingWith:value];
    } error:^id(NSError *e) {
        # error is error returned from first promise
		return e;
    }];

无论是否履行或拒绝都始终执行回调

    [promise finally:^ {
        .. do something ..
    }];

从回调返回一个承诺以链式处理异步工作

    KSPromise *chained = [promise then:^id(id value) {
		KSPromise promise = [obj doAsyncThing];
		return promise;
    } error:^id(NSError *e) {
        return e;
    }];

    [chained then:^id(id value) {
        # value is value from doAsyncThing
    } error:^id(NSError *e) {
        # error is error from doAsyncThing
    }];

返回在一系列其他承诺完成后完成的承诺

    KSPromise *waitForMe1 = ...;
    KSPromise *waitForMe2 = ...;
    
    KSPromise *joinedPromise = [KSPromise when: @[
        waitForMe1, waitForMe2
    ]];

方法 all:when: 的同义词。

使用泛型进行改进的类型安全性(Xcode 7 及更高版本)

    KSPromise<NSDate *> *promise = [KSPromise promise:^(resolveType resolve, rejectType reject) {
        [obj doAsyncThing:^(id value, NSError *error) {
			resolve([NSDate date]);
		}];
    }];

    [promise then:^id(NSDate *date) {
        .. do something ..
        return date;
    } error:^id(NSError *e) {
        .. handle error ..
        return e;
    }];

作者

版权所有 (c) 2013-2016 Kurtis Seebaldt。本软件按 MIT 许可协议许可。