Функции генератора с синхронными вызовами методов - PullRequest
0 голосов
/ 25 мая 2018

Можете ли вы использовать yield для вызова не асинхронного вызова метода?

Функция генератора

function* generatorFunction () {
    var asyncResult = yield doSomethingAsync();
    console.log(asyncResult)

    var nonAsyncResult = yield doSomethingNonAsync();
    console.log(nonAsyncResult)
}

Поддерживающие методы

function doSomethingAsync() {
    axios
    .get("https://jsonplaceholder.typicode.com/posts")
    .then(response => {
        generatorInstance.next(response.data);
    })
}

function doSomethingNonAsync(){
    generatorInstance.next("foo");
}

Результат

Сначала console.log работает должным образом, регистрирует результаты вызова axios, затем я получаю следующую ошибку JavaScript

Uncaught (в обещании) TypeError: Генератор уже работает в generatorFunction.next () в doSomethingNonAsync (async.html: 16) в generatorFunction (async.html: 23) в generatorFunction.next () в axios.get.then.response (async.html: 11)

https://jsfiddle.net/dsquod1m/

1 Ответ

0 голосов
/ 25 мая 2018

Ваши проблемы не имеют ничего общего с синхронизацией или асинхронным вызовом.Проблема в том, что вы пытаетесь запустить next() из генератора:

var nonAsyncResult = yield doSomethingNonAsync(); // this contains another next() call

Генераторы не могут самостоятельно вызывать себя из своих внутренних компонентов.

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