终极版,传奇:VS调用fork和join

问题描述 投票:5回答:2

在终极版,传奇,什么原因可能你赞成使用callforkjoin

例如,调用一个HTTP API时,有什么优点和这样做的利弊:

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

与此:

const task = yield fork(apiWrapperFunction, arg1, arg2)
const result = yield join(task)
redux-saga
2个回答
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
投票

除@码头的answer

两者都可以用于调用正常和发电机的功能。

此外,fork(fn, ...args)上FN执行非阻塞呼叫 - 而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

© www.soinside.com 2019 - 2024. All rights reserved.