首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >其他人的传奇故事

其他人的传奇故事
EN

Stack Overflow用户
提问于 2017-04-21 14:37:10
回答 1查看 65关注 0票数 1

在如何在redux-saga中组织代码方面,我发现了困难。我有一个特殊的传奇,它让http请求(和许多其他工作)。

我不希望它是一个命令式的功能,但我也不想太混乱。

目前,我已经创造了一个传奇故事,将通过这一行动来援引:

代码语言:javascript
运行
复制
export const makeServerRequest = (options, success, error) => ({type: MAKE_REQUEST, options, success, error});

故事就是这样的:

代码语言:javascript
运行
复制
function *makeRequestSaga(action) {
    try {
        // saga magic
        yield put(action.success(response));
    } catch (error) {
        yield put(action.error(error));
    }
}

function *serverSagasWatcher() {
    yield takeEvery(MAKE_REQUEST, makeRequestSaga);
}

这种方法的问题我发现很难遵循逻辑,在我看来,它似乎回到了回调时间。

其他sagas以这种方式调用该操作:

代码语言:javascript
运行
复制
yield put(makeServerRequest(options, loginSuccessful, loginError));

function *loginSuccessfulSaga(action) {
    console.log('Success');
}

function *loginErrorSaga(action) {
    console.log('Login error');
}

以这种方式,我有更多的观察者(每个请求的传奇都需要定义两个动作并运行两个观察者,每个返回函数一个)。

这个用例的最佳实践是什么?

我也可以进行真正的回调,但问题是生成器将一直存活直到回调结束,因此如果回调中有一个无限循环,那么生成器将永远挂起。

如果我需要执行make请求命令,那么redux-saga相对于redux-thunk的优点是什么?

我确信我错过了一些很容易的事情,但我没有找到任何解决办法.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-02 11:01:18

最有可能的是,你通常不需要这样的建筑。相反,您可以在一个函数中执行操作序列--单元中的生成器尝试/捕捉,并且通过构造产额+允诺来实现异步和等待。

也许你是说遵循解决方案?

代码语言:javascript
运行
复制
function makeServerRequest(options) {
    return fetch(options) /* Or more complex fetch logic */
        .then((result) => {
            let isOkay = true, errorMessage = null
            /* Implement your verification logic here */
            return isOkay
                ? Promise.resolve(result)
                : Promise.reject(errorMessage)
        })
}

function * makeRequestSaga(action) {
    try {
        yield call(makeServerRequest(options));
        yield put(action.success(response));
    } catch (error) {
        yield put(action.error(error));
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43545435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档