// data&&data
.
map(item=>{
// 通过promise关键字解决 获取数组时元素顺序混乱问题。
for
(let i = 0; i < data
.
length; i++) {
sections
.
push(new Promise((r
es
olve, reject) => {
request
.
get(`${HOS
.
.
.
我们在前端开发的时候有时候会用到在loop中发送
请求
的情况。例如:
for
(var i = 0; i < 100; i++){
//此处根据i的值
循环
发送同样的
请求
,只是参数依赖于i
在使用的时候 我们会发现获取的数据,不是我们想要的。
原因:i值在整体走完后才发送
请求
。
解决方案:
for
(var i = 0; i < 100; i++){
.
.
.
近期在学习的时候遇到了一个问题,在
循环
发送axios
请求
后,我需要通过
请求
成功后的状态来进行判断是否需要进行下一步操作,但是发现axios是异步
请求
,所以我写在
for
循环
后面的判断老是提前执行。在查看了官方文档后发现了axios
.
all和axios
.
spread,所以记录一下通过axios
.
all和axios
.
spread解决的问题
提示:以下是本篇文章正文内容,下面案例可供参考
for
循环
数组调用同一接口传入不同 id 获取数据,改装数组实现需求。由于接口比较特殊,同时多次调用不稳定,
for
循环
调接口会变成异步执行会报错,所以需要等待上一个
请求
完成再执行下一次
请求
,可以采用
for
循环
+ promise + async await 实现。使用定时器模拟
请求
:
打印结果:
.
.
.
今天遇到一个需求就是,需要在
for
循环
中,进行axios异步
请求
。一般这个这个时候就遇到两个问题
因为你的
请求
是在
for
循环
中,而且又是异步的
请求
所以,
请求
出来的数据顺序错乱
还有就是在
for
里 等所有的异步
请求
完成之后,再去处理数据。这时你就会发现。它是先走了异步
请求
下边的代码,因为这个是线程问题,在一个就是异步的,它不会等着你完成
请求
之后再去执行。因为
JS
运行在浏览器中,是单线程的
for
(let i = 0; i < 5; i++) {
setTimeout(function() {
场景:渲染一个聊天列表,按消息往来时间排序。
在
for
循环
中调用wx
.
request
,开始在把整个
for
包装成一个Promise,然后发现
request
就是异步的,多次
请求
回来的数据在
for
循环
里就出现乱序了。然后想把每个
request
包装成Promise,但
for
循环
次数不确定,想写回调地狱都没得写。这种情况可以用
ES
7的async await。
async用来声明一个函数是异步的,该函数会返回一个Promise对象。
await可理解为async wait,await必须出现在async内部。它的主要
.
for
循环
中进行联网
请求
数据,由于网络
请求
是异步的,第一个网络
请求
还没有回调,第二次第三次以及后续的网络
请求
又已经发出去了,有可能后续的网络
请求
会先回调;这时我们接收到的数据的排序就会错乱;怎么才能让数据和
for
循环
进行异步操作之前的顺序一样呢;
1、网络
请求
使用同步
请求
,串型
请求
,等第一个网络
请求
回调后再去
请求
第二个;
2、递归迭代,异步的网络
请求
,在当前
请求
完成后再去递归
请求
下一个;
但
.
.
.
在一个列表
循环
里,对数据进行赋值,调用接口,
循环
外后面的代码需等待所有
请求
执行完成后再去执行。
2
.
for
await…of实现(推荐)
这种方法是
es
6
新语法,其介绍如下:
for
…of 针对可迭代对象身上的(array, map, set, string, typedarray, argements)
迭代的是对象列表
中的
值(value) ,一般情况遍历数组
for
…in 针对对象的属性进行无序遍历,除了symbol类的属性
遍历的是属性,一般情况适用于对象遍历该方法使用起来,相比Promise
.
all要