Javascript React:异步回调函数中未定义此选项
我已经在这上面很久了,我需要帮助。 我试图调用一个API链接,我有一个数据数组作为调用的参数进行调用。 在调用之后,我想将组件状态设置为得到的结果Javascript React:异步回调函数中未定义此选项,javascript,reactjs,asynchronous,Javascript,Reactjs,Asynchronous,我已经在这上面很久了,我需要帮助。 我试图调用一个API链接,我有一个数据数组作为调用的参数进行调用。 在调用之后,我想将组件状态设置为得到的结果 let animals = ['cats','goats'] ; async.each(animals, function(item, cb){ axios.get(`http://api.com?keyword=${item}`) .then(res=> { apiData.push(res.data)
let animals = ['cats','goats'] ;
async.each(animals, function(item, cb){
axios.get(`http://api.com?keyword=${item}`)
.then(res=> {
apiData.push(res.data)
this.setState({
stateData: apiData
});
});
})
async。每个
只有在您想一个接一个地执行请求时才有意义,然后您必须调用cb()
,以便链继续:
async.each(array, (item, cb) => { // <- arrow func!
axios.get(`/http://api.com?keyword=${item}`)
.then(res => {
apiData.push(res.data);
this.setState({ stateData: apiData });
cb(); // <---
});
});
PS:您应该始终处理承诺中的错误,因此只需将
.catch(/*..*/)
附加到链…,对forEach
和api请求回调使用箭头函数,这将防止javascript在回调链期间重新分配this
的值
有关ES6中箭头函数的更多信息,请阅读:为什么每次都设置状态?为什么不为最后一个参数设置状态呢?stateData不起作用,它表明这不起作用definded@user3424387您必须使用箭头功能(参见我的答案)@duhaime您对原始问题的编辑操纵了问题的初始含义和意图,请以后不要这样做。这有误导性。@mxdi9i7我更改了标题以反映用户在上面的评论中报告的错误。请看他们的评论。好的,我想我以前做过,但是迷路了,比如说,
cb()
是我设置stateData状态的地方cb(apiData){this.setState({stateData:apiData});}
也非常正确。您能否给出一个实例使用forEach
仍然是aysnc,因此您无法获得后面的值。const animals=['cat','dog'];设apiData=[];animals.forEach((pets)=>axios.get(
{city})。然后(res=>apiData.push(res.data));console.log(apiData)
结果是[]
@user3424387您不能只编辑原始问题和ocntext,然后对回答原始问题的我的回答进行向下投票。原始问题的背景是关于此未定义。我指出您在forEach回调中使用的是function关键字而不是arrow函数,这就是为什么这个引用没有指向组件的原因。虽然您对数组异步请求的使用也是错误的,但它超出了您原始问题的范围,因此我没有基于此编写答案。不,我没有这样做,我没有编辑我的问题,也没有更改主题,向上滚动您将看到duhaime编辑的内容,我猜他在@mxdi9i7上否决了您
const promises = array.map(item => axios.get(`/http://api.com?keyword=${item}`).then(res => res.data));
Promise.all(promises).then(stateData => {
this.setState({ stateData });
});