【问题标题】:How to pass values from one redux-sagas generator to another如何将值从一个 redux-sagas 生成器传递到另一个
【发布时间】:2017-07-24 01:17:27
【问题描述】:

我希望在 storedApiCall 函数中尝试捕获来自 apiCall 的值,然后将该值传递给 loginHandle 生成器。所以问题是 json 等于 undefined

function* storedApiCall(name,route,kwargs){
    try {
        const response = yield call(apiCall, route, kwargs);
    } catch(e) {
        console.log('exception: ' + e.message);
        console.log(e);
    }
}

所以我希望json的值和response的值一样

function * loginHandle(action) {

     const json =  yield call(storedApiCall,'name', '/api/auth/login', {username, password});
     console.log('result is');
     console.log(json)
}

【问题讨论】:

  • 尝试调用 call(storedApiCall, ....)
  • 似乎没有用我要更改其他内容吗?
  • 不确定预期的结果是什么?为什么需要生成器?
  • response 和 json 应该等于 apiCall 函数的结果。我认为有必要在 redux sagas 中处理异步
  • 在 Question 中使用 JavaScript 遇到什么问题?

标签: javascript generator redux-saga


【解决方案1】:

是的,Vladislav lhost 说的是真的,json 返回 undefined 因为 storeApiCall 什么都不返回。

function* storedApiCall(name,route,kwargs){
    try {
        const response = yield call(apiCall, route, kwargs);
        return response;

    } catch(e) {
        return e.message;
        console.log('exception: ' + e.message);
        console.log(e);
    }
}

现在它可能在 json 上有一些东西。

【讨论】:

  • 返回时我得到一个空白对象
  • 产量应该返回给其他函数吧?
  • 是的,它应该已经返回,生成器的工作原理与诺曼函数几乎相同,除了一些不同之处,但具有相同的逻辑。
【解决方案2】:

设法通过使用渠道使其工作

export default function * rootSaga() {
    chan = yield call(channel,buffers.expanding(10))

在根 saga 中定义通道并在文件顶部声明它

传递函数

yield put.resolve(chan,response);

接收函数

yield call(passingFunction)
const response = yield take(chan)

【讨论】:

    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多