redux-saga:调用vs fork和join

时间:2017-12-13 17:21:55

标签: redux-saga

在redux-saga中,您可能因为什么原因而赞成使用callforkjoin

例如,在调用HTTP API时,执行此操作的优缺点是什么:

const result = yield call(apiWrapperFunction, arg1, arg2)

与此相对:

const task = yield fork(apiWrapperFunction, arg1, arg2)
const result = yield join(task)

2 个答案:

答案 0 :(得分:7)

据我所知,没有那么多,但您可以取消forkjoin之间的任务。

const task = yield fork(api, arg);

if (someCondition) {
  yield cancel(task);
}

const result = yield join(task);

// Now a no-op since `join` blocked for the task to finish
cancel(task);

当您使用spawn时,差异会更大。它将创建一个分离的分支,当父任务是(例如)时,它不会自动取消。

答案 1 :(得分:0)

除了@Pier的answer

两者都可以用来调用普通函数和生成器函数。

此外,fork(fn, ...args) fn 上执行 non-blocking 呼叫-call(fn, ...args)处于阻塞状态。

示例:

function* main() {
    yield fork(someSaga);
    console.log('this won't wait for the completion of someSaga');
}

function* main() {
    yield call(someSaga);
    console.log('this will wait for the completion of someSaga');
}

这是一个有用的example的fork。