const { call, put, delay, all } = require('redux-saga/effects'); const { runSaga, stdChannel } = require("redux-saga"); // Setup const channel = stdChannel/**/(); const myIO/*: RunSagaOptions*/ = { // this will be used to orchestrate take and put Effects channel, // this will be used to resolve put Effects dispatch(output) { throw new Error('[PUT] This saga is not setup with a store connection: ' + output); }, // this will be used to resolve select Effects getState() { throw new Error('[SELECT] This saga is not setup with a store connection'); }, }; // Main code function callApi(url) { console.log(new Date() + 'Calling ' + url); return Promise.resolve(['Yass']); } function* callApiWithDelay(url) { const result = yield call(callApi, url); yield delay(5000); return result; } function* fetchResults() { console.log(new Date() + 'fetchResults starting'); const listing = yield callApiWithDelay('/list') for(const item of listing) { yield callApiWithDelay('/res/'+item) } console.log(new Date() + 'fetchResults finished'); } function* mainLoop() { yield delay(100); // Startup delay so console logs make sense while(true) { yield all([ call(fetchResults), //delay(1000 * 60 * 20), delay(1000 * 7), ]); } } const task = runSaga( myIO, mainLoop )