Javascript 如何仅在“时”设置状态;“地图”;循环结束了吗?
我发送了一些http请求,在承诺解决之后,我需要在数组中循环并执行一些异步操作。我想让函数保持异步,但我只需要在“映射”循环完成后执行setState:Javascript 如何仅在“时”设置状态;“地图”;循环结束了吗?,javascript,reactjs,asynchronous,promise,setstate,Javascript,Reactjs,Asynchronous,Promise,Setstate,我发送了一些http请求,在承诺解决之后,我需要在数组中循环并执行一些异步操作。我想让函数保持异步,但我只需要在“映射”循环完成后执行setState: fetchData = () => { let data = []; let tickets = http.get('/api/zendesk/tickets'), users = http.get('/api/zendesk/users'), items = http.get('/api/order
fetchData = () => {
let data = [];
let tickets = http.get('/api/zendesk/tickets'),
users = http.get('/api/zendesk/users'),
items = http.get('/api/orders/items'),
reqTypes = http.get("/api/support/requests");
Promise.all([users,tickets,items,reqTypes])
.then(values => {
console.log(values);
let usersArr = values[0].data.users,
ticketsArr = values[1].data.tickets,
itemsArr = values[2].data,
requestArr = values[3].data;
data = ticketsArr.map((ticket,key) => {
let id = ticket.custom_fields.find(field => field.id === productions_fields.order_id || field.id === develop_fields.order_id).value;
id === null ? ticket.Items = [] : ticket.Items = itemsArr.filter(item => item.order_id === parseInt(id));
ticket.Requests = requestArr.filter(request => request.id === ticket.id);
})
this.setState({tickets:data})
}).catch(err => console.log(err))
}
是否可以这样做,或者我需要像“for”一样进行同步循环
我得到一个“未定义对象”数组,为什么
因为您不返回地图主体内部的任何内容,并且默认情况下,它返回未定义的
data = ticketsArr.map((ticket,key) => {
let id = ticket.custom_fields.find(field => field.id === productions_fields.order_id || field.id === develop_fields.order_id).value;
id === null ? ticket.Items = [] : ticket.Items = itemsArr.filter(item => item.order_id === parseInt(id));
ticket.Requests = requestArr.filter(request => request.id === ticket.id);
return ticket // <- this
})
检查此代码段:
a=[1,2,3,4].map(el=>{
log('el=',el);
})
log('a=',a)//未定义值的数组
array.prototype.map
希望您返回每个元素的最终形式。现在您没有返回任何内容,因此每个元素都成为未定义的
data = ticketsArr.map((ticket,key) => {
let id = ticket.custom_fields.find(field => field.id === productions_fields.order_id || field.id === develop_fields.order_id).value;
id === null ? ticket.Items = [] : ticket.Items = itemsArr.filter(item => item.order_id === parseInt(id));
ticket.Requests = requestArr.filter(request => request.id === ticket.id);
return ticket // <- this
})
data=ticketsArr.map((票证,钥匙)=>{
让id=ticket.custom_fields.find(field=>field.id==productions_fields.order_id | | field.id==developed_fields.order_id).value;
id==null?ticket.Items=[]:ticket.Items=itemsArr.filter(item=>item.order_id==parseInt(id));
ticket.Requests=requestArr.filter(request=>request.id==ticket.id);
返回票证//当前代码有什么问题?还有map中的哪个操作是异步的?我在打印状态时得到一个“未定义对象”数组…我认为“filter”方法是异步的,否?使用forEach
检查解决方案,要修改现有数组,我们应该使用forEach
而不是map
:)很高兴它帮助了你:)