如何从普通的基于Promise的代码中使用生成器函数?

时间:2019-01-28 12:02:06

标签: generator redux-saga

这是一个我可以从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;
   }
}

但是要说在代码的其他地方,我希望不使用redux-saga实现相同的流程。我该怎么办?甚至有可能吗?

这是我最好的(困惑和失败的)尝试:

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 :(得分:2)

这是不可能的(除非您决定自己处理所有效果),尽管没有理由getSessionToken必须是传奇,所以您可以将其重写为正常功能然后使用它到处都是

相关问题