2017-02-27 41 views
0

我有這個deleteSkill處理程序。在這個處理程序中,我打電話給一些API來刪除技能。 (yield call(utils.deleteSkill))。它成功調用了API,但之後沒有任何執行。 yield調用後的控制檯語句不會輸出任何內容。我無法弄清楚任何事情。 任何人都可以幫助我嗎?Redux傳奇在收益調用後不執行

import { takeLatest, delay, takeEvery } from 'redux-saga' 
import { call, fork, put, race, take } from 'redux-saga/effects' 
import * as ActionTypes from './../constants/actions' 

/* Handlers */ 
function* fetchSkills(action) { 
try { 
    const { data } = yield call(utils.fetchSkills, action) 
    yield put({type: ActionTypes.SUCCESS_FETCH_SKILLS, data}) 
    } catch (e) { 

    } 
} 

function* deleteSkill(action) { 
try { 
    yield call(utils.deleteSkill, action.data) //doesn't execute after this 
    console.log('Hello') //won't execute 
    yield put({type: ActionTypes.REQUEST_FETCH_SKILLS}) 
    } catch (e) {} 
} 

/* Watchers */ 
function* watchFetchSkills() { 
while (true) { 
    yield* takeLatest(ActionTypes.REQUEST_FETCH_SKILLS, fetchSkills) 
    } 
} 

function* watchDeleteSkill() { 
    while (true) { 
    yield* takeLatest(ActionTypes.REQUEST_DELETE_SKILL, deleteSkill) 
    } 
} 

export default function* rootSaga() { 
yield [ 
    fork(watchFetchSkills), 
    fork(watchDeleteSkill), 
    ] 
} 
+0

看到'utils.deleteSkill'功能 – VonD

+0

這將是有益'導出功能deleteSkill(數據){ 回報DELETE({ API: '$ {expertsAPI.skills} $ {}的數據/', 的HandleError: true }) .then(json => json) }' – madhurgarg

+0

您的控制檯是否輸出警告,如'deleteSkill was cancelled'? – VonD

回答

0

我懷疑這是因爲在你的function* watchFetchSkills()function* watchDeleteSkill(),該yield不應該有一個*。它應該是yield

即使你調用一個根據源的另一發生器功能從 function* watchDeleteSkill()它的實際調用takeLatest,:

https://github.com/redux-saga/redux-saga/blob/5fa5d628a80bbb4bfe488288b3ed19b5396f4d14/src/internal/io.js#L164

是不是發電機的功能。這只是一個普通的舊功能,這意味着不需要yield*