JavaScript函数中插入加载动画(Spinner)的正确方法

JavaScript函数中插入加载动画(Spinner)的正确方法

本文旨在解决在JavaScript函数中插入加载动画(Spinner)时遇到的异步问题。通过引入async/await和Promise.all,确保在数据处理完成前后正确显示和隐藏加载动画,提升用户体验。我们将提供两种实现方案,并详细解释其原理和优势。

在Web开发中,当执行耗时操作时,显示加载动画(Spinner)可以有效地提升用户体验。然而,在JavaScript中,由于异步操作的特性,直接控制Spinner的显示和隐藏可能会出现问题。本文将介绍如何正确地在JavaScript函数中插入Spinner,确保在数据处理开始时显示,并在处理完成后隐藏。

使用 async/await 控制 Spinner 显示和隐藏

最直接的解决方法是使用 async/await 关键字。async 关键字用于声明一个异步函数,而 await 关键字用于暂停异步函数的执行,直到一个 Promise 对象被解决(resolved)或拒绝(rejected)。

以下是一个示例:

立即学习Java免费学习笔记(深入)”;

document.getElementById("insert").addEventListener(   "click",   async function (event) {     event.preventDefault();     var spinner = document.getElementById("spinner");     spinner.style.display = ""; // 显示 Spinner     await insertDataToDatabase(results.data); // 等待数据插入完成     spinner.style.display = "none"; // 隐藏 Spinner   },   false );  async function insertDataToDatabase(data) {   data_noheader = data.slice(1);    for (i = 0; i < data_noheader.length; i++) {     await $.ajax({       url: "index.php",       type: "POST",       dataType: "json",       data: {         action: "import",         data: data_noheader[i],       },       success: function (response) {},       error: function (response) {},     });   } }

在这个例子中,insertDataToDatabase 函数被声明为 async 函数,并且在循环中使用 await 等待每个 $.ajax 请求完成。这意味着,只有当所有数据都成功插入数据库后,spinner.style.display = “none”; 才会执行,从而正确地隐藏 Spinner。

注意事项:

JavaScript函数中插入加载动画(Spinner)的正确方法

SoundRaw AI

面向创作者的 AI 音乐生成器,只需选择情绪、流派和长度,SoundRaw AI就能为你生成优美的歌曲。

JavaScript函数中插入加载动画(Spinner)的正确方法79

查看详情 JavaScript函数中插入加载动画(Spinner)的正确方法

  • 确保你的代码运行在支持 async/await 的环境中。现代浏览器都支持,但对于旧版本浏览器,可能需要使用 Babel 等工具进行转译。
  • await 只能在 async 函数内部使用。

使用 Promise.all 并行处理请求

虽然 async/await 解决了异步问题,但循环中的 $.ajax 请求是串行执行的,效率较低。可以使用 Promise.all 并行处理这些请求,从而提高效率。

document.getElementById("insert").addEventListener(   "click",   async function (event) {     event.preventDefault();     var spinner = document.getElementById("spinner");     spinner.style.display = "";     await insertDataToDatabase(results.data);     spinner.style.display = "none";   },   false );  async function insertDataToDatabase(data) {   data_noheader = data.slice(1);    await Promise.all(     data_noheader.map((row) => {       return $.ajax({         url: "index.php",         type: "POST",         dataType: "json",         data: {           action: "import",           data: row,         },         success: function (response) {},         error: function (response) {},       });     })   ); }

在这个例子中,data_noheader.map((row) =youjiankuohaophpcn { … }) 创建了一个包含所有 $.ajax 请求的 Promise 数组。Promise.all 接收一个 Promise 数组作为参数,并返回一个新的 Promise。这个新的 Promise 会在数组中所有 Promise 都解决后解决,或者在数组中任何一个 Promise 拒绝后拒绝。

优势:

  • 并行执行请求,提高效率。
  • 代码更简洁,易于阅读。

注意事项:

JavaScript函数中插入加载动画(Spinner)的正确方法

SoundRaw AI

面向创作者的 AI 音乐生成器,只需选择情绪、流派和长度,SoundRaw AI就能为你生成优美的歌曲。

JavaScript函数中插入加载动画(Spinner)的正确方法79

查看详情 JavaScript函数中插入加载动画(Spinner)的正确方法

  • 如果任何一个请求失败,Promise.all 就会拒绝,导致 Spinner 无法隐藏。需要添加错误处理机制,例如使用 try…catch 块捕获错误。
  • 并行请求可能会对服务器造成压力,需要根据实际情况调整并发数量。

总结

在JavaScript函数中插入加载动画(Spinner)需要注意异步操作带来的问题。使用 async/await 可以确保代码按顺序执行,从而正确地控制 Spinner 的显示和隐藏。使用 Promise.all 可以并行处理请求,提高效率。选择哪种方法取决于具体的应用场景和性能需求。无论选择哪种方法,都应该充分考虑错误处理和性能优化,以提供最佳的用户体验。

以上就是JavaScript函数中插入加载动画(Spinner)的正确方法的详细内容,更多请关注php javascript java js json ajax 浏览器 工具 ai 解决方法 JavaScript ajax try catch 循环 map 并发 对象 promise 异步 display 数据库 性能优化

大家都在看:

php javascript java js json ajax 浏览器 工具 ai 解决方法 JavaScript ajax try catch 循环 map 并发 对象 promise 异步 display 数据库 性能优化

ai
上一篇
下一篇