【发布时间】:2018-02-04 14:24:37
【问题描述】:
我发送了一些 http 请求,在 Promise 解决之后,我需要遍历数组并执行一些异步操作。我想使函数保持异步,但我只需要在“map”循环完成后执行 setState:
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))
}
【问题讨论】:
-
当前代码有什么问题?也在地图里面哪个动作是异步的?
-
当我打印状态时得到一个“未定义对象”数组...我认为“过滤器”方法是异步的,不是吗?
标签: javascript reactjs asynchronous promise setstate