如何创建一个在执行任何操作之前等待2个动作的redux-observable史诗

时间:2017-07-11 23:05:18

标签: javascript redux rxjs redux-observable

我想创建一个在工作之前侦听明确的动作序列的史诗。

这首史诗在第一次完成后也不需要存在。

我想象的是:

  
function doTheThing(action$) {
  return action$
     // The start of the sequence
    .ofType(FIRST_ACTION)

    // Do nothing until the second action occurs
    .waitForAnotherAction(SECOND_ACTION)

    // the correct actions have been dispatched, do the thing!
    .map(() => ({ type: DO_THE_THING_ACTION }))
    .destroyEpic();
}

redux-observable是否可以这样?

2 个答案:

答案 0 :(得分:6)

正如@jayphelps在评论中指出的那样,根据您是否需要访问各种事件以及是否必须严格订购事件,有几种变体。所以以下都应该适合:

1)严格命令不关心事件:

#include <iostream>

using namespace std;

void pi(int arr[],int x){
    for(int c = 0;c < x;c++){
        cout << arr[x] << endl;
    }
}

int main()
{
    int _arr[4] = {3543,146,961262,-242};
    pi(_arr, 4);
}

2)严格命令关注事件

action$
  .ofType(FIRST_ACTION)
  .take(1)
  .concat(action$.ofType(SECOND_ACTION).take(1))
  .mapTo({ type: DO_THE_THING_ACTION })

3)非严格命令(做或不关心)事件

action$
  .ofType(FIRST_ACTION)
  .take(1)
  .concatMap(
    a1 => action$.ofType(SECOND_ACTION).take(1),
    (a1, a2) => ({type: DO_THE_THING_ACTION, a1, a2})
  )

答案 1 :(得分:4)

这是它与redux observables的相似之处:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/zip';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/take';


function doTheThing(action$) {
  return Observable
     // waits for all actions listed to complete
    .zip(action$.ofType(FIRST_ACTION).take(1), 
         action$.ofType(SECOND_ACTION).take(1),
     )

    // do the thing
    .map(() => ({ type: DO_THE_THING_ACTION }));
}