Различное поведение, чтобы дать обещание между простым генератором и сагой Redux

Узел имеет область видимости модуля, поэтому var abc = '123' в модуле создаст переменную, которая привязана к этому модулю (и, следовательно, доступна только для кода).

См. также http : //nodejs.org/api/globals.html#globals_global

2
задан PunCha 17 January 2019 в 08:36
поделиться

1 ответ

Чтобы расширить мой комментарий, приведу пример кода, который делает нечто подобное

function * test() {
    const result = yield new Promise(resolve => setTimeout(() => resolve('foo'), 1000))
    console.log('Result is: ', result)
}

function run(gen) {
    const iter = gen()
    const makeStep = (err, value) => {
        const step = !err ? iter.next(value) : iter.throw(err)
        if (step.done) return
        const p = step.value instanceof Promise ? step.value : Promise.resolve(step.value)
        p.then(val => makeStep(null, val), err => makeStep(err))
    }
    makeStep()
}

run(test)

. Как вы можете видеть, я перебираю генератор и, когда нахожу обещание, я жду, пока оно не будет решено, и затем передайте разрешенное значение в iter.next(value). Если я найду что-нибудь еще, я преобразую его в разрешенное обещание, чтобы выражение yield мгновенно разрешало все, что было получено.

Конечно, Redx-сага ищет не только обещания, но и всевозможные эффекты, каждый из которых имеет свою определенную функциональность.

0
ответ дан Martin Kadlec 17 January 2019 в 08:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: