Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/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 雷杜传奇不是';不要等待api调用解决,而是不断返回承诺。我该怎么做;yeild call“是的”;等待api调用?_Javascript_Reactjs_Redux_Redux Saga - Fatal编程技术网

Javascript 雷杜传奇不是';不要等待api调用解决,而是不断返回承诺。我该怎么做;yeild call“是的”;等待api调用?

Javascript 雷杜传奇不是';不要等待api调用解决,而是不断返回承诺。我该怎么做;yeild call“是的”;等待api调用?,javascript,reactjs,redux,redux-saga,Javascript,Reactjs,Redux,Redux Saga,我发出API请求的位置: function* search(value){ // return new Promise(async (resolve, reject)=>{ // try { // const res = await axios.get(`https://www.breakingbadapi.com/api/characters?name=${value}`) // console.log(res.da

我发出API请求的位置:

function* search(value){
    // return new Promise(async (resolve, reject)=>{
    //     try {
    //         const res = await axios.get(`https://www.breakingbadapi.com/api/characters?name=${value}`)
    //         console.log(res.data)
    //         resolve(res.data)
    //     } catch (error) {
    //         reject(error)
    //     }
    // })

    return axios.get(`https://www.breakingbadapi.com/api/characters?name=${value}`)

            .then(res=>{
                console.log(res.data)
            })

            .catch(err=>{
                // console.log(err)
            })
}
我调用此函数以获取结果并将其置于以下状态:

  function* startSearch(value){
    try {
        yield put({type:'loading'})
        const person = yield call(search, value)
        console.log("SAGA",person)
        yield put({type:'success', payload:person})
    } catch (error) {
        yield put({type:'failure'})
    }
}
正如您所看到的,我已经尝试将api调用包装为一个承诺和一个典型的.then.catch。不管我如何保证,没有任何类型的对象按预期状态存储。根据docs的说法,如果生成器返回承诺,收益率调用应该暂停生成器,但这似乎没有发生


编辑:这就是为什么你需要远离屏幕的原因。我所需要做的就是从搜索函数中删除“*”。超级简单。

看似简单。您所需要做的就是将promise生成函数调用包装在自己的函数中,然后可以使用Redux Saga的
call()
调用该函数

我认为您只需要将
搜索
函数设置为常规函数,而不是生成器函数。(卸下
*

函数搜索(url){
返回axios({url})
.then(response=>response.data)
.catch(错误=>{
日志错误(err);
});
}
函数*startSearch(){
const response=yield调用(搜索、下载URL);
}

更像是令人尴尬的简单!我不敢相信我忽略了这一点。回想起来,一切似乎都很简单@警官,如果你能在你有空的时候把答案记下来,那真的会让我的一天很愉快!