ReactiveCocoa 链接网络操作失败

ReactiveCocoa chaining network operations failed

我尝试用ReactiveCocoa做网络操作链,但是失败了。我不知道我的代码有什么问题。

- (RACSignal *)pg_findObjectsInBackground {
    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {

        [self findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
            if (error) {
                [subscriber sendError:error];
                return;
            }
            [subscriber sendNext:objects];
            [subscriber sendCompleted];
        }];

        return [RACDisposable disposableWithBlock:^{
            [self cancel];
        }];
    }];
}

- (RACSignal *)pg_countObjectsInBackground {
    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {

        [self countObjectsInBackgroundWithBlock:^(int number, NSError *error) {
            if (error) {
                [subscriber sendError:error];
                return;
            }
            [subscriber sendNext:@(number)];
            [subscriber sendCompleted];
        }];

        return [RACDisposable disposableWithBlock:^{
            [self cancel];
        }];
    }];
}

    __block NSError *_error;
    @weakify(self)
    [[[self.query pg_countObjectsInBackground]flattenMap:^RACStream *(NSNumber *count) {
        @strongify(self)
        self.totalCount = [count integerValue];
        // Second, fetch experiences
        self.query.limit = self.pageSize;
        self.query.skip = self.pageSize * self.currentPage;
        return [self.query pg_findObjectsInBackground];
    }]subscribeNext:^(NSArray *experiences) {
        @strongify(self)
        [self.experiences removeAllObjects];
        [self.experiences addObjectsFromArray:experiences];
    } error:^(NSError *error) {
        _error = error;
    } completed:^{
        @strongify(self)
        if (finishBlock) {
            finishBlock(self, _error);
        }
    }];

第一次请求成功。但是我一return[self.query pg_findObjectsInBackground],就直接去disposableWithBlock

因为您对计数和查找对象操作使用相同的 PFQuery 对象,所以当您从 flattenMap 方法 return 时,查询将被取消。 flattenMap 订阅了新信号(这是同一个信号),我认为这会导致一次性装置发射。一个简单的解决方案是在 flattenMap 块中构建一个新的 PFQuery 和 return。

我假设你正在使用 Parse,如果你是,你应该标记它。