1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 微信小程序 在for循环中调用wx.request异步请求数据

微信小程序 在for循环中调用wx.request异步请求数据

时间:2018-11-18 11:04:44

相关推荐

微信小程序 在for循环中调用wx.request异步请求数据

场景:渲染一个聊天列表,按消息往来时间排序。在for循环中调用wx.request,开始在把整个for包装成一个Promise,然后发现request就是异步的,多次请求回来的数据在for循环里就出现乱序了。然后想把每个request包装成Promise,但for循环次数不确定,想写回调地狱都没得写。这种情况可以用ES7的async await。async用来声明一个函数是异步的,该函数会返回一个Promise对象。await可理解为async wait,await必须出现在async内部。它的主要任务是等待async的resolve,如果等待的是Promise对象,会造成异步函数停止执行并等待Promise的解决代码

requestMessage(item){return new Promise((resolve,reject)=>{wx.request({url:'获取渲染数据的服务器地址',method:'GET',data:{userId:item.receiverId},success:res=>{console.log(res);this.setState({contactList:this.state.contactList.concat({receiverId:res.data.data.userId,avatarUrl:res.data.data.avatarUrl,userName:res.data.data.userName, })})resolve(); // 返回给await}})})}onLoad(){// ...(async ()=>{for(let i=0;i<res.data.data.length;i++){let item=res.data.data[i];await this.requestMessage(item);}})()// 把箭头函数(一个匿名函数)声明async,在循环中await要渲染的数据。再包一层立即执行函数}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。