Если я выдаю функцию, которая ожидает вызовов асинхронных функций, это то же самое, что вызывать yield call () для этих асинхронных вызовов? - PullRequest
0 голосов
/ 16 октября 2019

Я только что узнал о функциях урожайности и генератора, и я не совсем уверен, что понимаю все.

Допустим, у меня есть функция fetchAndGetJson

async function fetchAndGetJson() {
   const res = await fetch('site.com')
   let json = await res.json()
   formatMyJson(json);
   return json;
}

И я вызываю эту функцию изфункция генератора

function* gengen() {
    const json = yield fetchAndGetJson()
    yield put({type: "NICE_JSON", data: json.data});
}

Затем Redux-saga будет вызывать эту функцию при выполнении определенного действия.

Это то же самое, как если бы моя функция gengen была такой:

function* gengen() {
    const res= yield call(fetch, 'site.com')
    let json = yield call ([res, 'json'])
    formatMyJson(json)
    yield put({type: "NICE_JSON", data: json.data});
}

Из того, что я понял, разница в том, что с помощью await все строки будут выполняться, поэтому formatMyJson будет вызываться независимо от того, что, в то время как с yield, redux-saga может сказать: «Мы не будем дальше в этомзапрос, потому что мы получили более свежее действие этого времени "и остановились после 1 доходности или 2.

Это правильно? Есть ли другие отличия?

...