redux-saga: call vs fork und join

In der redux-saga, aus welchen Gründen könnte Sie gefallen mit call vs. fork und join?

Beispielsweise beim Aufruf einer HTTP-API, was sind die vor-und Nachteile, dies zu tun:

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

Vergleich zu diesem:

const task = yield fork(apiWrapperFunction, arg1, arg2)
const result = yield join(task)
InformationsquelleAutor James Nail | 2017-12-13

 

2 Replies
  1. 7

    Nicht viel soweit ich das beurteilen kann, aber kann man dann kündigen die Aufgabe, zwischen den fork und die 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);
    

    Der Unterschied ist viel größer, wenn Sie verwenden spawn statt. Es wird ein freistehende Gabel das ist nicht automatisch storniert, wenn die übergeordnete Aufgabe ist es (zum Beispiel).

  2. 1

    Zusätzlich zu @Pier ist Antwort,

    Beide können verwendet werden, aufrufen, normal-und generator-Funktionen.

    Auch fork(fn, ...args) führen Sie eine non-blocking Anruf auf fn – während call(fn, ...args) blockiert.

    Beispiel:

    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');
    }
    

    Hier eine nützliche Beispiel der Gabel.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.