使用async进行进度条的制作
1、首先先准备一个微型的后台,这里我们使用nodejs搭建一个api:
const express = require("express")
const app = express()
const cors = require("cors")
app.use(cors())
app.get("/user",(req,res)=>{
setTimeout(()=>{
res.send([
{
id:1,
name:"张三"
},
{
id:2,
name:"李四"
},
{
id:3,
name:"王二麻"
}
])
},2000)
})
app.listen(80,()=>{
console.log("serve run in http://127.0.0.1");
})
搭建好后台后,前端就可以使用异步进行对我们api的访问
2、首先前端使用promise封装一个ajax向后台请求数据(这里我们使用原生ajax发起数据请求):
function Ajax(url){
return new Promise ((resolve,reject) => {
let xhr = new XMLHttpRequest();
xhr.open("GET",url,true);
xhr.send()
xhr.onreadystatechange = function(){
if(this.status === 200){
resolve(this.responseText)
}else{
reject("请求失败")
}
}
xhr.onerror = function(){
reject(this)
}
})
}
然后就是我们的进度条操作以及页面的实现:
<style>
#loading {
width: 0;
height: 100px;
background: blue;
color: white;
display: flex;
justify-content: center;
align-items: center;
}
</style>
<div id="loading"></div>
<script src="./promise.js"></script>
<script>
function query(name) {
return Ajax(`http://127.0.0.1/user?name=${name}`)
}
async function loading(users) {
let loading = document.querySelector("#loading");
for (let i = 0; i < users.length; i++){
let user = await query(users[i])
let progress = ((i+1) / users.length) * 100
loading.style.width = Math.round(progress) + "%"
loading.innerHTML = Math.round(progress) + "%"
}
}
loading(["张三", "李四", "王二麻"])
</script>
最终效果:
第一次请求成功回来: 第二次请求成功回来: 第三次请求成功回来: 这是一个动态加载的过程,加载速度取决于后台返回前台数据的速度。
总结:使用aysnc可以帮助我们,更方便的进行异步的处理,可能文章有写的不好的地方,欢迎大家向我提出来,嘿嘿,谢谢大家~!
|