美文网首页
阿里巴巴 coobjc 协程开源

阿里巴巴 coobjc 协程开源

作者: Albert新荣 | 来源:发表于2019-03-16 00:37 被阅读0次

阿里巴巴出品的协程库,该库主要提供了支持Swift和OC,貌似也只有这两种原始语言了,下面介绍怎么安装,pods使用对应你要使用的Swift或者OC

cocoapods for objective-c:  pod 'coobjc'
cocoapods for swift: pod 'coswift'
cocoapods for cokit: pod 'cokit'
source code: All the code is in the ./coobjc directory

下面看一下

一.异步/等待

1.创建协程
创建一个协程使用 co_launch 方法

co_launch(^{
    ...
});

通过co_launch建立的协程是默认的运行在当前线程里面的。

2.异步等待的方法
在这个协程里面我们异步的方法等待处理,并异步的获取处理的结果

- (void)viewDidLoad {
    ...
    co_launch(^{
        // async downloadDataFromUrl
        NSData *data = await(downloadDataFromUrl(url));
        
        // async transform data to image
        UIImage *image = await(imageFromData(data));

        // set image to imageView
        self.imageView.image = image;
    });
}
上面的代码很简洁,而dispatch_async 需要两次的进入有序处理数据的。

3.错误机制
在协程中,我们所有的方法都直接返回数据,错误获取通过 co_getErroe()。例如,我们通过网络连接获取数据,如果我们的请求收到错误信息的时候,我们可以使用co_launch获取错误信息。如下

//请求错误
- (COPromise*)co_GET:(NSString*)url parameters:(NSDictionary*)parameters{
    COPromise *promise = [COPromise promise];
    [self GET:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        [promise fulfill:responseObject];
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        [promise reject:error];
    }];
    return promise;
}

//直接拿到返回值
co_launch(^{
    id response = await([self co_GET:feedModel.feedUrl parameters:nil]);
    if(co_getError()){
        //handle error message
    }
    ...
});

相关文章

网友评论

      本文标题:阿里巴巴 coobjc 协程开源

      本文链接:https://www.haomeiwen.com/subject/naodmqtx.html