Javascript Redux传奇没有';收益率调用后不执行
我有一个技能训练员。在这个处理程序中,我调用一些api来删除技能。(收益调用(utils.deleteSkill))。它成功地调用了api,但之后什么也不执行。yield调用后的console语句不输出任何内容。我什么都想不出来。 有人能帮我吗Javascript Redux传奇没有';收益率调用后不执行,javascript,redux-saga,Javascript,Redux Saga,我有一个技能训练员。在这个处理程序中,我调用一些api来删除技能。(收益调用(utils.deleteSkill))。它成功地调用了api,但之后什么也不执行。yield调用后的console语句不输出任何内容。我什么都想不出来。 有人能帮我吗 import { takeLatest, delay, takeEvery } from 'redux-saga' import { call, fork, put, race, take } from 'redux-saga/effects' impo
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),
]
}
我怀疑这是因为在你的
函数*watchFetchSkills()
和函数*watchDeleteSkill()
中,收益率不应该有*
。它应该是yield
即使您正在从
函数*watchDeleteSkill()
实际上调用的是takeLatest
,根据源代码:
不是一个生成器函数。这只是一个普通的旧函数,这意味着不需要yield*
。对“action”进行结构化,只将所需参数传递给“yield call(actionFunc,…args)”可能会有所帮助。查看utils.deleteSkill
函数导出函数deleteSkill(data){return DELETE({api:'${expertsAPI.skills}${data}/',handleError:true})。然后(json=>json)}
您的控制台是否会输出一个警告,如deleteSkill被取消
?不,它根本不会执行!@VonD deleteSkill执行得很好。