##实现过程
- 通过节点对model进行监听,并通过requestUrl对监听得到的数据进行区分
@interface RequestResultModel : NSObject
@property(nonatomic ,copy)NSString * requestUrl;//请求的接口
@property(nonatomic ,copy)id result;//请求的结果
@end
@interface RequestModel : NSObject
@property(nonatomic ,copy)NSString * requestUrl;//请求的接口
@property(nonatomic ,copy)NSMutableDictionary * params;//请求参数
@property(nonatomic ,assign)BOOL isPOST; //默认GET请求
@end
- 在viewModel的基类里对节点和网络请求进行绑定
- (instancetype)init {
if (self = [super init]) {
_parameters = [EZRMutableNode new];
EZRMutableNode *returnedNode = [EZRMutableNode new];
EZRNode * result= [_parameters flattenMap:^EZRNode * _Nullable(RequestModel * _Nullable requestModel) {
if (requestModel.isPOST) {
[self postRequestDataWithUrl:requestModel.requestUrl params:requestModel.params returnedNode:returnedNode];
}else{
[self getRequestDataWithUrl:requestModel.requestUrl params:requestModel.params returnedNode:returnedNode];
}
return returnedNode;
}];
EZRIFResult *ifResultNode = [result if:^BOOL(id _Nullable next) {
RequestResultModel * model = (RequestResultModel *)next;
return [model.result isKindOfClass:NSDictionary.class];
}];
_resultNode = ifResultNode.thenNode;
_errorNode = ifResultNode.elseNode;
}
return self;
}
- 在VC使用过程中对viewmodel的resultNode进行监听,对viewmodel的parameters节点进行赋值,通过监听到RequestResultModel的requestUrl去区分不同的请求【用这种方式可能比较迂回,有更好的方式欢迎指正】
//网络请求请求
-(void)requestHotData{
RequestModel * requestModel = [[RequestModel alloc]init];
NSMutableDictionary * params = [[NSMutableDictionary alloc]init];
[params setObject:@(1) forKey:@"type"];
[params setObject:@(self.viewModel.page) forKey:@"page"];
requestModel.params = params;
requestModel.requestUrl = meituUrl;
[self.viewModel.parameters setValue:requestModel];
}
@ezr_weakify(self)
[[self.viewModel.resultNode listenedBy:self]withBlockOnMainQueue:^(id _Nullable next) {
@ezr_strongify(self)
RequestResultModel * resultModel = (RequestResultModel *)next;
if ([meituUrl isEqualToString: resultModel.requestUrl] ) {
}
if ([weatherUrl isEqualToString:resultModel.requestUrl]) {
}
}];