Rxjs redux可观测测试图

Rxjs redux可观测测试图,rxjs,redux-observable,Rxjs,Redux Observable,在使用forkJoin时,我不知何故很难想出大理石图。我的输出总是说订阅是空的 伪代码: // epic const epic = (action$) => action$.pipe( ofType('SAVE'), mergeMap(() => { const requests = [ getJSON('/a'), getJSON('/b'), getJSON('/c'), ]; return forkJoin(

在使用
forkJoin
时,我不知何故很难想出大理石图。我的输出总是说订阅是空的

伪代码:

// epic
const epic = (action$) => action$.pipe(
  ofType('SAVE'),
  mergeMap(() => {
    const requests = [
      getJSON('/a'),
      getJSON('/b'),
      getJSON('/c'),
    ];
    return forkJoin(
      ...requests
    ).pipe(
      mergeMap(() => [
        { type: 'SAVE_DONE'},
        { type: 'LOAD'},
      ])
    );
  })
);

// mock
const dependencies = {
  getJSON: url => cold('g', {
    g: { url }
  })
};

// input
hot('i', {
  i: { type: 'SAVE' }
} 
// output??

forkJoin是并行的,但在大理石图中它是顺序的<代码>ggg?如果我们查看整个流程,它是
igggxy
,其中x和y是
SAVE\u DONE
LOAD
操作。还是我完全误解了这一点?

如果对
epic
进行测试,您应该期待两次
SAVE\u DONE
LOAD
的发射,因为您需要括号

然后,该图应该如下所示:

cold(“(ab)”{
a:{type:'SAVE_DONE'},
b:{type:'LOAD'},
})
};
因为
getJSON
的依赖性取决于您,您可以在那里实际模拟错误或加载延迟,最长的是赢家

const依赖项={
getJSON:url=>
url=='/a'
?冷(“--a |”{
a:{url}
}) :
url=='/b'
?冷('--a |'{
a:{url}
}) :
url=='/c'
?冷('--a |'{
a:{url}
}) :
冷('|',{}),
};
因为我们有40毫秒的延迟,主图表应该是

cold('---(ab)'{
a:{type:'SAVE_DONE'},
b:{type:'LOAD'},
})
};

如果测试
epic
,您应该期待两次
SAVE\u DONE
LOAD
的发射,因为您需要括号

然后,该图应该如下所示:

cold(“(ab)”{
a:{type:'SAVE_DONE'},
b:{type:'LOAD'},
})
};
因为
getJSON
的依赖性取决于您,您可以在那里实际模拟错误或加载延迟,最长的是赢家

const依赖项={
getJSON:url=>
url=='/a'
?冷(“--a |”{
a:{url}
}) :
url=='/b'
?冷('--a |'{
a:{url}
}) :
url=='/c'
?冷('--a |'{
a:{url}
}) :
冷('|',{}),
};
因为我们有40毫秒的延迟,主图表应该是

cold('---(ab)'{
a:{type:'SAVE_DONE'},
b:{type:'LOAD'},
})
};

这太奇怪了
forkJoin
仅在其所有源观测值发出至少一次且完成时发出。您使用的是
cold('g')
,这意味着这个可观察对象永远不会完成。如果你能制作一个stackblitz演示,那么你必须将它改为
cold(“(g |”)
,这会有所帮助。太棒了!谢谢:)这个和预期的
(ab)
一起工作很好。你能再解释一下完整运算符在这里有什么帮助吗?我想没什么好解释的
forkJoin
要求完成所有源观测值,因此
非常重要。当您有
(a |)
时,这意味着源将发送值并在同一帧内完成;本质上它的意思是:
subscriber.next('a');subscriber.complete()
。这太奇怪了
forkJoin
仅在其所有源观测值发出至少一次且完成时发出。您使用的是
cold('g')
,这意味着这个可观察对象永远不会完成。如果你能制作一个stackblitz演示,那么你必须将它改为
cold(“(g |”)
,这会有所帮助。太棒了!谢谢:)这个和预期的
(ab)
一起工作很好。你能再解释一下完整运算符在这里有什么帮助吗?我想没什么好解释的
forkJoin
要求完成所有源观测值,因此
非常重要。当您有
(a |)
时,这意味着源将发送值并在同一帧内完成;本质上它的意思是:
subscriber.next('a');subscriber.complete()