向RACSubscriber发送错误需要返回吗?

Ton*_*old 3 objective-c reactive-cocoa

return [RACSignal create:^(id <RACSubscriber> subscriber) {
    if (someError) {
        [subscriber sendError:documentCreationError];
        return;
    }

    [subscriber sendNext:nil];
    [subscriber sendCompleted];
}];
Run Code Online (Sandbox Code Playgroud)

鉴于上面的示例,return;在向订户发送错误之后是否有必要,或者在此块内执行是否立即停止?

eri*_*ice 5

鉴于上面的例子,是回报; 在向订户发送错误之后是否有必要,或者在此块内执行是否立即停止?

鉴于上面的确切示例代码,return没有必要.但是这个块内的执行不会立即停止.return如果您或其他人稍后添加了一些可能产生副作用的代码,使用它会更安全:

return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
    if (someError) {
        [subscriber sendError:documentCreationError];
    }

    // This message will be printed even if an error is sent above:
    NSLog(@"Do something that could have side effects.");

    [subscriber sendNext:nil];
    [subscriber sendCompleted];
    return nil;
}];
Run Code Online (Sandbox Code Playgroud)

(这就是为什么最好不要用信号来保持副作用,但是用Obj-C和ReactiveCocoa强制执行它是不可能的.)

  • 实际上,这就是我们大多数RAC代码早期返回的原因.除了副作用之外,您还可能正在进行计算密集型工作,而实际上并不需要在错误情况下进行. (2认同)