gpt4 book ai didi

ios - 链接 RACSignals 和回滚

转载 作者:行者123 更新时间:2023-11-28 19:57:10 26 4
gpt4 key购买 nike

我对 ReactiveCocoa 比较陌生,想知道如何将一系列 REST GET 调用链接在一起,以便它们按顺序执行。如果其中一个调用出错,则整个过程将回滚。

所以我正在使用 pod 'AFNetworking-RACExtensions', '0.1.1' 我有一个 NSArray 信号。大多数这些信号看起来像这样:

 - (RACSignal *) form
{
@weakify(self);

RACSubject *repSubject = [RACSubject subject];
[[ServiceClient getForm] subscribeNext:^(RACTuple *jsonTuple) {
if ([jsonTuple second])
{
// create core data objects here
[repSubject sendNext: nil];
[repSubject sendCompleted];
}
} error:^(NSError *error) {
[repSubject sendError: error];
}];
return repSubject;
}

所以像这样的大量信号都在 NSArray 中。我想按照它们在数组中出现的顺序处理这些调用,并有一个共享的错误处理程序和完成 block 。我认为我在不使用 nsarray 的情况下取得了成功,并且拥有如下代码:

@weakify(self);
[[[[[[self form] flattenMap:^(id value) {
// perform your custom business logic
@strongify(self);
return [self signal2];
}] flattenMap:^(id value) {
// perform your custom business logic
@strongify(self);
return [self signal3];
}] flattenMap:^(id value) {
// perform your custom business logic
@strongify(self);
return [self signal4];
}] flattenMap:^(id value) {
// perform your custom business logic
@strongify(self);
return [self signal5];
}] subscribeError:^(NSError *error) {
@strongify(self);
[self handleError: error];
} completed:^{
// Successful Full Sync
// post notification
}];

如何使用 NSArray 信号完成所有这些操作,同时仍然能够使用 subscribeError 和已完成的 block ?

我假设它是这样的:

 @weakify(self);
[[[array.rac_sequence flattenMap:^RACStream *(id value) {
// dunno what to do
}] subscribeError:^(NSError *error) {
@strongify(self);
[self handleError: error];
} completed:^{
// Successful Full Sync
// post notification
}];

最佳答案

首先,我们通过 - signalWithScheduler: 将 RACSequence 转换为流中的流。然后,我们可以通过-flattenmergestream-of-streams 成为一个信号新流。之后,我们可以将其用作普通流。

是的,如果您不需要处理每个响应,您当然可以使用 - subscribeError: completed:

[[[[array rac_sequence] signalWithScheduler:[RACScheduler immediateScheduler]] flatten] subscribeNext:^(id x) {
// Handle each results
} error:^(NSError *error) {
// Handle error
} completed:^{
// Completed
}];

关于ios - 链接 RACSignals 和回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25789397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com