在终极版,传奇,什么原因可能你赞成使用call
与fork
和join
?
例如,调用一个HTTP API时,有什么优点和这样做的利弊:
const result = yield call(apiWrapperFunction, arg1, arg2)
与此:
const task = yield fork(apiWrapperFunction, arg1, arg2)
const result = yield join(task)
没有那么多,据我所知道的,但你可以取消fork
和join
之间的任务。
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
代替。这将创建一个分离叉未自动取消父任务是(例如)。
除@码头的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。