Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Redux传奇没有';收益率调用后不执行_Javascript_Redux Saga - Fatal编程技术网

Javascript Redux传奇没有';收益率调用后不执行

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

我有一个技能训练员。在这个处理程序中,我调用一些api来删除技能。(收益调用(utils.deleteSkill))。它成功地调用了api,但之后什么也不执行。yield调用后的console语句不输出任何内容。我什么都想不出来。 有人能帮我吗

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执行得很好。