redux-saga:调用vs fork和join

Jam*_*ail 7 redux-saga

在redux-saga中,你有什么理由赞成使用callvs. forkjoin

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

const result = yield call(apiWrapperFunction, arg1, arg2)
Run Code Online (Sandbox Code Playgroud)

与此相对:

const task = yield fork(apiWrapperFunction, arg1, arg2)
const result = yield join(task)
Run Code Online (Sandbox Code Playgroud)

Ida*_*gan 12

除了@Pier 的回答

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

此外,对fnfork(fn, ...args)执行非阻塞调用- while正在阻塞。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');
}
Run Code Online (Sandbox Code Playgroud)

这是一个有用的 fork示例


Pie*_*mon 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);
Run Code Online (Sandbox Code Playgroud)

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