- 场景:渲染一个聊天列表,按消息往来时间排序。
- 在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,
})