2016-08-27 37 views
5

Redux'a tepki vermek için yeni. Sadece Redux Saga'yı denemek ve anlayamadığım bazı hata mesajlarıyla karşılaşmak. Bu benim rootSaga geçerli:Redux destan "rootSaga iptal edildi"

import { takeEvery } from 'redux-saga'; 
import { AUTH_LOAD_SUCCESS,AUTH_SIGNUP,AUTH_SIGNIN,AUTH_SIGNOUT } from '../reducers/auth'; 
import { receiveAuth,signUp,signIn,onSignOut } from './auth'; 

export default function* rootSaga(){ 
    yield [ 
     takeEvery('AUTH_LOAD_SUCCESS', receiveAuth), 
     takeEvery('AUTH_SIGNUP', signUp), 
     takeEvery('AUTH_SIGNOUT',onSignOut), 
     takeEvery('AUTH_SIGNIN', signIn)   
] 

}

açma ve kaydolma benim için mükemmel çalışıyor ama bundan sonra benim konsolunda aşağıdaki hata iletilerini almak

. Bu yüzden, redux-saga kullanarak oturum açabilsem de, hata mesajlarına göre "iptal edildi" deyimi nedeniyle muhtemelen SignOut'un çalışmasını sağlayamıyorum. Birisi bana neler olduğunu açıklayabilir mi? Teşekkür

bundle.js:79457 uncaught at check call: argument fn is undefinedlog @ bundle.js:79457 
bundle.js:79457 rootSaga has been cancelled 
bundle.js:79457 uncaught at rootSaga 
at rootSaga 
at signIn 
Error: call: argument fn is undefined 
    at check (http://127.0.0.1:3000/dist/bundle.js:79313:12) 
    at getFnCallDesc (http://127.0.0.1:3000/dist/bundle.js:80311:21) 
    at call (http://127.0.0.1:3000/dist/bundle.js:80336:24) 
    at signIn$ (http://127.0.0.1:3000/dist/bundle.js:81213:47) 
    at tryCatch (http://127.0.0.1:3000/dist/bundle.js:7893:41) 
    at GeneratorFunctionPrototype.invoke [as _invoke] (http://127.0.0.1:3000/dist/bundle.js:8167:23) 
    at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (http://127.0.0.1:3000/dist/bundle.js:7926:22) 
    at next (http://127.0.0.1:3000/dist/bundle.js:79727:28) 
    at currCb (http://127.0.0.1:3000/dist/bundle.js:79801:8) 
    at http://127.0.0.1:3000/dist/bundle.js:79904:17 

Ekstra bilgi:

sagas/auth.js 
import 'babel-polyfill'; 
import fetch from 'isomorphic-fetch' 
import { browserHistory } from 'react-router'; 
import cookie from 'react-cookie'; 
import { put,call,select } from 'redux-saga/effects'; 
import { requestSignUp,requestSignIn,requestSignOut,receiveUser,receiveSignIn,receiveSignOut } from '../reducers/auth' 



export function* onSignOut(){ 

/////////////////ignore this for the moment/////// 
console.log("ffss") 

} 

export function* receiveAuth() { 
    const user = cookie.load('username'); 

    yield put(receiveAuth(user)); 
    } 

export function* signUp(action) { 
    yield put(requestSignUp()) 
    try { 
     const response = yield call(fetch,'/api/sign_up', { 
        method:'POST', 
        headers:{'Accept': 'application/json', 'Content-Type': 'application/json'}, 
        body: JSON.stringify(action.payload) /////action.payload contains {username:'aa',password:'aa'} 
        }) 
     if(response.ok){ 
      yield call(cookie.save,'username', action.payload.username) 
      yield put(receiveUser(action.payload.username)) 
      yield call(browserHistory.push('/chat')) 
     } 
    } catch (err){ 
     throw err 
     }  
} 

export function* signIn(action) { console.log("hi") 
    yield put(requestSignIn()) 
    try { 

     const response = yield call(fetch,'/api/sign_in', { 
       method:'POST', 
       headers:{'Accept': 'application/json', 'Content-Type': 'application/json'}, 
       body: JSON.stringify(action.payload) /////action.payload contains {username:'aa',password:'aa'} 
       }) 


     if(response.ok){ 
      yield call(cookie.save,'username',action.payload.username) 
      yield put(receiveSignIn(action.payload)) 
      yield call(browserHistory.push('/chat')) 
     } 
    } catch (err){ 
     throw err 
     } 
} 

Aramam için ikinci argüman koymak için beklenen am düşünüyorum ama boş kodlanmış zaman yani yield call(browserHistory.push('/chat'),null) Hala hataları olsun

uncaught at signIn call: argument fn is undefined 
uncaught at check call: argument fn is undefined 

Ayrıca, benim almaAdam bu msg:

uncaught at rootSaga 
at rootSaga 
at receiveAuth 
Error: Actions must be plain objects. Use custom middleware for async actions. 
+0

Eğer signin'i destan kodunu gönderebilir miyim (bağlam bir 1 argüman olarak verilmiştir)? istisnanın atıldığı yer burası gibi görünüyor –

cevap

11

Hata, signIn destanının içinde bulunan bir yield call(somefunc, ...)'dan geliyor. someFunc (kodunuzda adı ne olursa olsun) undefined olduğunu söylüyor. Eğer işlev adı yanlış yazılmış ya da belki onun tanımlayan modülünden ihraç etmek ihmal sığınak Yani eğer kontrol etmelisiniz

Bunu

yield call(browserHistory.push('/chat'),null) 
gibi browserHistory.push işlevini çağırmak fark

DÜZENLEME

Fonksiyonu kendiniz aramamalısınız ama argümanlar (ve bu bağlamda bu bağlam) ile birlikte fonksiyonun kendisinin işlevini

yield apply(browserHistory, browserHistory.push, ['/chat']) 

Ben this bağlam yöntemleri çağırmadan verir apply Effect kullanıyorum

+0

Soruna neden olabilecek iki çağrı var. Eklediğim ek bilgileri gör. Lütfen nasıl düzeltilmeleri gerektiğini söyler misiniz? – mtangula

+0

Mükemmel çalışıyor, teşekkürler! BTW Ben Naruto – mtangula

+0

Oh Yeeeeeeeees hayranıyım görüyorum! –

İlgili konular