代码之家  ›  专栏  ›  技术社区  ›  user1283776

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

  •  0
  • user1283776  · 技术社区  · 5 年前

    这是一个函数,我可以从 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 回复  |  直到 5 年前
        1
  •  2
  •   Martin Kadlec    5 年前

    这是不可能的(除非你自己决定处理所有的影响),没有理由 getSessionToken 不过需要有一个传奇,所以你可以将它重写为普通函数,然后你可以在任何地方使用它。