脚本宝典收集整理的这篇文章主要介绍了网易云音乐数据交互—async&await实现版(终结篇),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我们的网易云音乐系列课,尾声了,今天我们要将一个最重要的东西--关于es7 async结合Fetch异步编程问题。
ES7 async/await被称作异步编程的终极解决方案,我们先不管这个称呼,咱们先总结一下,过去5次分享我们一路走来异步编程是如何产生,到最后如何解决的。
第一次分享我们学会了切图和动态计算响应式rem布局,第二次分享我们体会了如何学习使用原生js进行学习轮播图,第三次分享了H5 audio这块,进而引出了第四次的异步请求歌词ajax和第五次的Fetch+promise解决方案。
但是每一种方案都不完美,我们通过代码来说明。
<!DOCTYPE htML>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=Edge">
<title>Document</title>
<script>
VAR a = 12;
//模拟数据交互需要等1秒钟
function loadData() {
setTimeout(function () {
a = 666;
}, 1000)
}
loadData();
console.log(a);
</script>
</head>
<body>
</body>
</html>
@H_512_139@
不用想,这个结果就是 12 而不是666,因为程序不会等1s才往下执行,但是有时候又必须使用数据,所以只能嵌套。但是嵌套多了又会出现下面的问题,案例来自SF的朋友,特此感谢。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
setTimeout(function () {
console.log("第一个异步回调了!")
setTimeout(function () {
console.log("第二个异步回调了!")
setTimeout(function () {
console.log("第三个异步回调了!")
setTimeout(function () {
console.log("第四个异步回调了!")
setTimeout(function () {
console.log("第五个异步回调了!")
}, 1000);
}, 1000);
}, 1000);
}, 1000);
}, 1000);
</script>
</head>
<body>
</body>
</html>
我特意写了一个程序,这下大家就能体会他的缺陷。
那我们怎么解决呢?