我想请教您一个跟项目无关的rac问题,如果您有时间希望解答一下
Insofan opened this issue · comments
我有一个需求 需要三个新号按顺序完成后发送一个新的新号给下一个订阅者,但是无论我怎么调整 subscribe 的位置,或者三个信号的发送位置,都会先发出sendNext,或者根本不发出sendNext,导致 订阅者总是执行顺序错误,会先读取数据再replace数据库,如果您有时间希望解答一下代码该怎么调整,谢谢.下面是我的代码,如果有什么别的写法也可以告诉我.
- (RACSignal *)replacePubRecentContact {
@weakify(self);
return [RACSignal createSignal:^RACDisposable *(id <RACSubscriber> subscriber) {
NSMutableArray <RIMRecentContactModel *> *contactModelMutableArray = [NSMutableArray new];
//1 Signal first
RACSignal *selectMessageSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[[[RIMPublicPostDatabaseManager sharedInstance] selectLastMessage] subscribeNext:^(NSArray <RIMRecentContactModel *> *pubContactModelArray) {
//这里穿回来的lastmMessage是一个pmsgId
for (NSUInteger i = 0; i < pubContactModelArray.count; ++i) {
if (pubContactModelArray[i].uid > 0) {
[contactModelMutableArray addObject:pubContactModelArray[i]];
}
}
[subscriber sendNext:@"pub replace select last message bingo"];
[subscriber sendCompleted];
}];
return nil;
}];
//2 Signal second
RACSignal *selectInfoSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
@strongify(self);
for (NSUInteger j = 0; j < contactModelMutableArray.count; ++j) {
@strongify(self);
[[self selectPubInfoWithPid:contactModelMutableArray[j].uid] subscribeNext:^(RIMPubInfoModel *pubInfoModel) {
contactModelMutableArray[j].username = pubInfoModel.name;
contactModelMutableArray[j].avatar = pubInfoModel.logo;
}];
}
[subscriber sendNext:@"pub replace select info bingo"];
[subscriber sendCompleted];
return nil;
}];
//3 Signal third
RACSignal *replaceSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[self.contactDatabaseQueue inDatabase:^(FMDatabase *db) {
for (NSUInteger k = 0; k < contactModelMutableArray.count; ++k) {
RIMRecentContactModel *recentContactModel = contactModelMutableArray[k];
//公众号type 3
recentContactModel.messageType = 3;
NSString *replaceSql = [NSString stringWithFormat:@"REPLACE INTO recentContact (uid, username, avatar, lastMessage, unRead, lastMessageTs, messageType, lastMessageMid, lastMessageSid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"];
//这里因为私聊公众号id重复所以加3
BOOL result = [db executeUpdate:replaceSql, @(recentContactModel.uid), recentContactModel.username, recentContactModel.avatar, recentContactModel.lastMessage, @(recentContactModel.unRead), @(recentContactModel.lastMessageTs), @(recentContactModel.messageType), @(recentContactModel.lastMessageMid), @(recentContactModel.lastMessageSid)];
if (!result) {
NSLog(@"插入最近联系人表失败");
} else {
NSLog(@"插入最近联系人表成功");
}
}
[subscriber sendNext:@"replace公众号最近联系人表成功"];
}];
return nil;
}];
[[[selectMessageSignal concat:selectInfoSignal] then:^RACSignal *{
return replaceSignal;
}] subscribeCompleted:^{
}];
[subscriber sendNext:@"replace pub all bingo"];
[subscriber sendCompleted];
return nil;
}];
}