Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Nov 18 23:34
    hubertokf opened #2140
  • Nov 17 20:28
    Slapbox opened #2139
  • Nov 17 11:18
    egorovsa commented #884
  • Nov 17 07:28
    Andarist commented #1828
  • Nov 16 23:08
    Slapbox commented #1828
  • Nov 16 07:26
    JasonXiaoSpace commented #1883
  • Nov 15 15:09
    Andarist commented #1800
  • Nov 15 11:29
    gadiGuesty commented #1800
  • Nov 12 11:11
    sofly commented #2138
  • Nov 11 04:16
    BuangHosen opened #2138
  • Nov 10 23:23
    d65yan commented #970
  • Nov 10 22:33
    Andarist commented #970
  • Nov 10 20:47
    gkielyellation commented #970
  • Nov 09 23:17
    Andarist closed #2137
  • Nov 09 23:17
    Andarist commented #2137
  • Nov 09 15:20
    MaxToyberman edited #2137
  • Nov 09 15:19
    MaxToyberman opened #2137
  • Nov 09 12:24
    abdymm commented #2098
  • Nov 09 10:32
    aepp commented #1064
  • Nov 08 20:33
    Avizura commented #2127
AmyBlankenship
@AmyBlankenship
In the documentation on task cancellation (https://redux-saga.js.org/docs/advanced/TaskCancellation.html), it shows how to test that a task was cancelled, but it seems to me to be waaay more important to test that the code in the task that actually does the real cancellation (if yield(cancelled) {abortController.abort()} for example) runs. But I haven't been able to figure out how you create a generator as a task and cancel it so that I can test this. I think I understand how to spy on the constructor for AbortController so I can look at what happened--I just have no clue how to make it happen in a test scenario. The code would normally get cancelled by takeLatest.
@harvester-klirk , if you're asking what I think you're asking, the action itself will be the argument, and you'll look at its properties to determine what you should do. In addition, you can get access to the state using select() to fill in any gaps.
AmyBlankenship
@AmyBlankenship
For anyone else wanting to test the finally logic in a canceled saga, I found the answer here https://stackoverflow.com/questions/46166401/unit-testing-redux-saga-task-cancellation https://github.com/redux-saga/redux-saga/issues/266#issuecomment-216087030. Hope this helps someone
Matti Järvinen
@nemeciii_twitter
Kinda related to @AmyBlankenship ´s question. I'm testing a full saga with runSaga. How would I add another action in there so I can test that it cancels the previous one?
Alan.He
@alanhg
for v1.o, catch not work? const rootTask = sagaMiddleware.run(rootSaga)
rootTask.done.catch(...)
Alan.He
@alanhg
Alan.He
@alanhg
anybody know the issue
Aleksander Vognild Burkow
@aleksanb
@gilbsgilbs i'm having a look at your dtslint branch
I'm not having any trouble running the tests, and think i might be getting other erors than you described
i get straight-up normal errors:
Error: /Users/aleksandervognildburkow/Projects/redux-saga/packages/core/types/ts3.5/channels.test.ts:24:1
ERROR: 24:1    expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 32:1    expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 45:1    expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 47:1    expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 51:1    expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 56:1    expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 58:1    expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 82:1    expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 90:1    expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 99:1    expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 112:1   expect  TypeScript@next: Expected an error on this line, but found none.
ERROR: 116:1   expect  TypeScript@next: Expected an error on this line, but found none.
Alan.He
@alanhg

In order for the execution exception of an effect to not affect the whole, I created a wrapper function. For example, the following adds safety to each effect, which solves the problem.

But if my effect is very large, it is very time consuming and not elegant to manually increase the safety. I want to know if there is any way, such as a loop function to automatically add safety to each effect, which makes the code more beautiful.

wrapper function

import { call } from 'redux-saga/effects';

export function safe(sagaFn) {
  return function* (action) {
    try {
      return yield call(sagaFn, action);
    } catch (e) {
      console.error('[react-demo | Saga Unhandled Exception] This error should be fixed or do some pre check in saga effects function.');
      console.error(e);
    }
  };
}

saga.js

function* mySaga() {
    yield takeEvery('USER_FETCH', safe(fetchUserEffects));
    yield takeEvery('TEST_SAGA', safe(testSagaEffects));
    yield takeEvery('TEST_SAGA', safe(testSagaEffects2));
}
@aleksanb
Gilbert Gilb's
@gilbsgilbs

@aleksanb Just came across your message. Thanks for reaching out! The errors you were pointing out occurred because TS wasn't able to resolve some types and was using any type as a replacement. So this was actually highly related to the issue I had.

As I said in the PR, I finally found a way to debug and fix it and the PR got merged into master :tada: . Unfortunately, it doesn't seem to work on @Andarist machine and he's unable to release, not sure why. If you want to give it a try 🤷‍♂️ .

@Andarist whenever you feel like it, we can spend some time to try to figure out what's wrong. Just tell me.
Aleksander Vognild Burkow
@aleksanb
amazing!
Great to see this being released now.
I upgraded our local project, the only thing missing now is for us to get const someresult = yield call(someTypedFunction) to work, but that's blocked on typescript adding more support, right?
Mateusz Burzyński
@Andarist
Yes
This cant yet be expressed in TS
There has been discussion around adding eslint plugins with autofixer that would annotate those for u
Prateek Chachra
@prateekchachra
Hey guys
needed some help
Trying to setup redux saga
The method in 'takeLatest' is being called more than 6000 times in one go, which is hanging my app
And it's only supposed to be called just once
Ryan Bas
@ryanbas21
Anyone familiar with redux-saga-test plan able to help me stop banging my head on the wall
Menci
@Menci
Does Saga effects need to be async? What for a sync effect in my app?
e.g. A library requires me to call .setLocale() when changing locale. It's a sync side effect.
Mateusz Burzyński
@Andarist
@Menci effects can be synchronous, yield call(() => 'foo') works
Phan Dang Dien
@phandd

I guys, I'm struggling in finding a proper way to use saga in my app. For example I have a fetch action and a notification function to push notification when the fetch action failed or succeeded.

The question is where should I put UI-related logic like notification, confirmation modals, router redirection...? Should I put it right in the saga?

That doesn't seem to be a good choice for me because I want the app logic to be separated from UI logic. That way I can later use my app logic for mobile and other devices and the only thing I need is to rebuild the UI itself. Can someone tell me what is the best practice for saga? Thank you!

A Flores
@unflores
@phandd Hrm...I think that sagas are mainly for managing async things, I think of it as a place to put my 3rd party interactions(3rd party being another server, my own server, a service of some sort, etc) Usually, I will take that data, and feed it into redux. Redux is piped in to my individual components.
wrt ui related things, if it is self contained within a single component I will actually handle it there. If it were something that had to do that had to communicate over multiple components I might use a saga? but I would probably just modify my store and have the respective components update themselves from redux.
for router redirection, I will usually render a redirection tag based on certain critiria directly in my component.
A Flores
@unflores
sometimes if I have something that needs to have a timeout before fetching more data, I will put that type of thing in sagas as well
Prateek Chachra
@prateekchachra
@prateekchachra
Hello everyone! How do you guys optimize API calls?
My API call takes about 1300 ms at max on postman, but on react native it takes 5 times that time
Dimitri Mitropoulos
@dimitropoulos
hi all!
I'm trying (and failing, hard) to introduce redux-saga into an app that uses typescript (ts-loader via webpack) and babel7. When I try to build I just get:
ERROR in ./node_modules/redux-saga/effects.d.ts
Module build failed (from ./node_modules/thread-loader/dist/cjs.js):
Thread Loader (Worker 0)
Debug Failure. Output generation failed
    at PoolWorker.fromErrorObj (/home/dimitri/src/github.com/weaveworks/wkp-ui/app/ui/node_modules/thread-loader/dist/WorkerPool.js:262:12)
    at Object.transpileModule (/home/dimitri/src/github.com/weaveworks/wkp-ui/app/ui/node_modules/typescript/lib/typescript.js:116825:29)
    at getTranspilationEmit (/home/dimitri/src/github.com/weaveworks/wkp-ui/app/ui/node_modules/ts-loader/dist/index.js:283:74)
    at successLoader (/home/dimitri/src/github.com/weaveworks/wkp-ui/app/ui/node_modules/ts-loader/dist/index.js:66:15)
    at Object.loader (/home/dimitri/src/github.com/weaveworks/wkp-ui/app/ui/node_modules/ts-loader/dist/index.js:22:12)
 @ ./src/store/index.ts 122:16-45
 @ ./src/store/configureStore.ts
 @ ./src/index.tsx
 @ multi ./src/index.tsx webpack-hot-middleware/client?overlay=false
ℹ 「wdm」: Failed to compile.
I've been struggling with this for about 6 hours and I've tried everything under the sun I can think of including:
  • introducing every combination of the babel polyfills, regenerator-transforms, runtimes, etc.
  • testing to make sure generators transpile in my project at all (they do)
  • flipping every option I can think of in my tsconfig
Edoardo Gallo
@EdoardoGallo_twitter

Hey guys! I'm looking for the best way to manage these sagas

  • classic LOGIN/LOGOUT process but - after login and before logout - i need to manage a websocket connection. For example:
LOGIN_REQUEST -> OPEN_WS_REQUEST

LOGOUT_REQUEST -> CLOSE_WS_REQUEST

Does the rootSaga need to watch for the WS actions or is it better that the LOGIN/LOGOUT workers handle some logic?

Within the LOGIN/LOGOUT workers i can fork/dispatch the actions to OPEN/CLOSE the websocket. Looking for the best approach in this case.
Thanks!
Alan.He
@alanhg
anyone know this issue
about exception handing
joystick
@joystick
Hi, could you please advise me with following?
I'm loading react app with URL query string arguments. I would like to check if they are valid and fire an API call to fetch app data from server.
I got URL query string params using query-string in componentDidMount() but now I would like to dispatch actions to update state with extracted params and fire an API calls from redux-saga. What's the recommended way to do so?
Katherine Xu
@zhixu
Hi all, would anyone happen to know if there is support for the redux batch() command with Redux saga ( https://react-redux.js.org/api/batch )?
stephouphoune
@stephouphoune
Hi all,
I have a question about redux-saga, here is my problem. When I’m rendering a list on React, I’m dispatching the exact same saga multiple times concurrently for the same API call. I’m wondering if there is a way to tell saga to automatically cancel the duplicates and only call one of them.
Cheers.
Andrew Craswell
@AndrewCraswell
Looking for some quick advice. I'm building a generic Saga wrapper at my company to let people connect to an API endpoint, and specify a Saga EffectCreator. As the EffectCreator (takeEvery, takeLatest, etc) process the API method, it assigns a unique Id to each request and tracks it in the store so the component can check the status. This works great for takeEvery, but when 3 components request the same endpoint simultaneously while using takeLeading, the subsequent tasks get ignored. This leaves entries in my Redux store that are still designated as isFetching, and my components think their data is still loading. How can I track (a) which tasks were actually taken, (b) which were ignored, and (c) dispatch an action to tell my component that the request was superseded?
It feels like the only way to accomplish this may be to recreate the EffectCreators and add my own custom handling logic in each, but I really want to avoid that.