Как использовать функции генератора из обычного кода, основанного на обещаниях? - PullRequest
0 голосов
/ 28 января 2019

Вот функция, которую я могу удобно вызвать из саги redux-saga:

export function* getSessionToken(username: string) {
    try {
        const session = yield call(refreshSession, username);
        return session.idToken.getJwtToken();
    } catch (error) {
        return;
    }
}

Использование:

function* signIn(username) {
   const jwt = yield call(getSessionToken, username);
   if (!jwt) {
       return;
   }
}

Но скажем, что где-то еще в моем коде яхотел добиться того же потока без использования Redx-сага.Как бы я сделал?Это вообще возможно?

Вот моя лучшая (сбитая с толку) попытка:

function signIn(username) {
    const generator = getSessionToken(username);
    let result = generator.next();
    while (!result.done) {
        result = it.next();
    }
    result.then((jwt) => {
        if (!jwt) {
            return;
        }
    })
}

1 Ответ

0 голосов
/ 28 января 2019

Это невозможно (если вы не решите разобраться со всеми эффектами самостоятельно), нет причины, по которой getSessionToken должен быть сагой, так что вы можете просто переписать его в обычную функцию, а затем использовать везде.

...