企业网站建设工作总结,app网站建设一般多少钱,友情链接添加在网站中有什么用,营销型企业网站项目策划表当我们在编写JavaScript代码时#xff0c;经常会遇到需要执行长时间运行的任务的情况#xff0c;例如从服务器获取数据或进行复杂的计算。在这些情况下#xff0c;我们不希望阻塞用户界面#xff0c;因为这会使网站看起来卡顿#xff0c;甚至无响应。为了避免这种情况经常会遇到需要执行长时间运行的任务的情况例如从服务器获取数据或进行复杂的计算。在这些情况下我们不希望阻塞用户界面因为这会使网站看起来卡顿甚至无响应。为了避免这种情况我们需要使用JavaScript中的异步编程技术。
异步编程是JavaScript中的一个核心概念它使我们能够在执行长时间运行的任务时不会阻塞用户界面而是在任务完成后立即返回结果。本文将介绍JavaScript中的异步编程方式并探讨它们的优缺点以及如何使用它们来解决常见的异步编程问题。
一、回调函数
回调函数是JavaScript中最早和最基本的异步编程方式。它通过在函数参数中传递一个函数让我们能够在异步操作完成后调用该函数。例如我们可以使用XMLHttpRequest对象从服务器获取数据
var xhr new XMLHttpRequest();
xhr.open(GET, https://example.com/data);
xhr.onreadystatechange function() {if (xhr.readyState 4 xhr.status 200) {console.log(xhr.responseText);}
};
xhr.send();在上面的例子中我们定义了一个XMLHttpRequest对象然后使用open()方法设置请求的类型和URL。然后我们为onreadystatechange属性指定了一个函数当readyState属性变为4且状态码为200时该函数将被调用。在该函数中我们可以访问响应文本并在控制台中打印它。
虽然回调函数是JavaScript中最早和最基本的异步编程方式但它有一些缺点。首先如果我们需要进行嵌套异步操作回调函数将变得非常复杂和难以理解。其次回调函数容易出现回调地狱问题这是指代码中有太多的回调函数使得代码难以维护和扩展。
二、Promise
为了解决回调地狱问题JavaScript引入了Promise它是一种更加高级的异步编程方式。Promise通过将异步操作的结果封装在一个对象中使得我们可以更加清晰和简洁地处理异步操作。例如我们可以使用Promise从服务器获取数据
fetch(https://example.com/data).then(response response.text()).then(text console.log(text)).catch(error console.error(error));在上面的例子中我们使用fetch()方法发起一个HTTP请求并将其封装在一个Promise对象中。然后我们使用.then()方法指定一个函数当Promise对象的状态变为fulfilled时将被调用。在这个函数中我们可以访问响应对象并将其转换为文本。然后我们使用.then()方法指定另一个函数当上一个Promise对象的状态变为fulfilled时将被调用。在这个函数中我们可以访问响应文本并在控制台中打印它。最后我们使用.catch()方法指定一个函数当Promise对象的状态变为rejected时将被调用。在这个函数中我们可以处理错误。
Promise还提供了一些其他的方法如Promise.all()和Promise.race()。Promise.all()可以同时处理多个Promise对象并在所有Promise对象都变为fulfilled时返回一个包含所有结果的数组。例如
Promise.all([fetch(https://example.com/data1),fetch(https://example.com/data2)
]).then(responses Promise.all(responses.map(response response.text()))).then(texts console.log(texts)).catch(error console.error(error));在上面的例子中我们使用Promise.all()方法同时发起两个HTTP请求并将它们封装在一个数组中。然后我们使用.then()方法指定一个函数该函数将结果数组作为参数并使用Promise.all()方法将结果数组中的所有响应对象转换为文本。最后我们使用.then()方法指定另一个函数该函数将文本数组作为参数并在控制台中打印它们。
Promise.race()可以处理多个Promise对象并在第一个Promise对象变为fulfilled或rejected时返回它的结果。例如
Promise.race([new Promise(resolve setTimeout(() resolve(foo), 2000)),new Promise((resolve, reject) setTimeout(() reject(new Error(bar)), 1000))
]).then(result console.log(result)).catch(error console.error(error));在上面的例子中我们使用Promise.race()方法处理两个Promise对象其中一个会在2秒后返回字符串foo另一个会在1秒后返回一个错误对象。由于第二个Promise对象先返回结果所以Promise.race()返回错误对象并在.catch()方法中处理它。
三、async/await
async/await是ES2017中引入的一种异步编程方式它建立在Promise之上并提供了更加简洁和直观的语法。async/await使用async函数来表示异步操作并使用await关键字来等待Promise对象的完成。例如我们可以使用async/await从服务器获取数据
async function getData() {try {const response await fetch(https://example.com/data);const text await response.text();console.log(text);} catch (error) {console.error(error);}
}
getData();在上面的例子中我们定义了一个async函数getData()并在其中使用await关键字等待fetch()方法返回一个响应对象。然后我们再次使用await关键字等待将响应对象转换为文本。最后我们可以在控制台中打印文本或处理错误。
与Promise一样async/await也支持多个异步操作的处理。例如我们可以使用Promise.all()和async/await同时处理多个Promise对象
async function getData() {try {const responses await Promise.all([fetch(https://example.com/data1),fetch(https://example.com/data2)]);const texts await Promise.all(responses.map(response response.text()));console.log(texts);} catch (error) {console.error(error);}
}
getData(); 在上面的例子中我们定义了一个async函数getData()并在其中使用Promise.all()方法同时发起两个HTTP请求并等待它们完成。然后我们使用await关键字等待将响应对象转换为文本并将所有结果放入一个数组中。最后我们可以在控制台中打印文本数组或处理错误。
总结
JavaScript是一门强大的编程语言具有异步编程的优势。在本文中我们介绍了三种常见的异步编程方式回调函数、Promise和async/await。回调函数是异步编程的基础但它的嵌套结构和错误处理使得代码难以维护。Promise是回调函数的一种改进它通过链式调用和错误处理提供了更好的可读性和可维护性。最后async/await建立在Promise之上提供了更加简洁和直观的语法。当我们需要处理多个异步操作时Promise.all()和Promise.race()提供了一种有效的方法。无论是哪种方式我们都可以在JavaScript中使用异步编程来实现更好的性能和用户体验。 文章转载自: http://www.morning.ysckr.cn.gov.cn.ysckr.cn http://www.morning.rshkh.cn.gov.cn.rshkh.cn http://www.morning.bpds.cn.gov.cn.bpds.cn http://www.morning.mjctt.cn.gov.cn.mjctt.cn http://www.morning.jtdrz.cn.gov.cn.jtdrz.cn http://www.morning.gxwyr.cn.gov.cn.gxwyr.cn http://www.morning.saastob.com.gov.cn.saastob.com http://www.morning.mhcft.cn.gov.cn.mhcft.cn http://www.morning.tdqhs.cn.gov.cn.tdqhs.cn http://www.morning.ghlyy.cn.gov.cn.ghlyy.cn http://www.morning.xpqdf.cn.gov.cn.xpqdf.cn http://www.morning.ctswj.cn.gov.cn.ctswj.cn http://www.morning.qggxt.cn.gov.cn.qggxt.cn http://www.morning.wflpj.cn.gov.cn.wflpj.cn http://www.morning.xtqld.cn.gov.cn.xtqld.cn http://www.morning.ktfnj.cn.gov.cn.ktfnj.cn http://www.morning.pwmpn.cn.gov.cn.pwmpn.cn http://www.morning.mxhcf.cn.gov.cn.mxhcf.cn http://www.morning.nnpwg.cn.gov.cn.nnpwg.cn http://www.morning.pwwjs.cn.gov.cn.pwwjs.cn http://www.morning.wdrxh.cn.gov.cn.wdrxh.cn http://www.morning.kxnjg.cn.gov.cn.kxnjg.cn http://www.morning.zpyxl.cn.gov.cn.zpyxl.cn http://www.morning.snrbl.cn.gov.cn.snrbl.cn http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn http://www.morning.xhhzn.cn.gov.cn.xhhzn.cn http://www.morning.cyyhy.cn.gov.cn.cyyhy.cn http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn http://www.morning.qfqld.cn.gov.cn.qfqld.cn http://www.morning.tzmjc.cn.gov.cn.tzmjc.cn http://www.morning.zwfgh.cn.gov.cn.zwfgh.cn http://www.morning.ymwnc.cn.gov.cn.ymwnc.cn http://www.morning.1000sh.com.gov.cn.1000sh.com http://www.morning.yxmcx.cn.gov.cn.yxmcx.cn http://www.morning.nwcgj.cn.gov.cn.nwcgj.cn http://www.morning.qxwrd.cn.gov.cn.qxwrd.cn http://www.morning.xctdn.cn.gov.cn.xctdn.cn http://www.morning.fktlg.cn.gov.cn.fktlg.cn http://www.morning.wncb.cn.gov.cn.wncb.cn http://www.morning.mczjq.cn.gov.cn.mczjq.cn http://www.morning.plhhd.cn.gov.cn.plhhd.cn http://www.morning.hkgcx.cn.gov.cn.hkgcx.cn http://www.morning.bloao.com.gov.cn.bloao.com http://www.morning.qbzdj.cn.gov.cn.qbzdj.cn http://www.morning.bsjxh.cn.gov.cn.bsjxh.cn http://www.morning.pmsl.cn.gov.cn.pmsl.cn http://www.morning.xfcjs.cn.gov.cn.xfcjs.cn http://www.morning.lbxhy.cn.gov.cn.lbxhy.cn http://www.morning.htsrm.cn.gov.cn.htsrm.cn http://www.morning.wrcgy.cn.gov.cn.wrcgy.cn http://www.morning.jfsbs.cn.gov.cn.jfsbs.cn http://www.morning.coatingonline.com.cn.gov.cn.coatingonline.com.cn http://www.morning.jtfcd.cn.gov.cn.jtfcd.cn http://www.morning.wdrxh.cn.gov.cn.wdrxh.cn http://www.morning.mcgsq.cn.gov.cn.mcgsq.cn http://www.morning.cwlxs.cn.gov.cn.cwlxs.cn http://www.morning.kfldw.cn.gov.cn.kfldw.cn http://www.morning.cbqqz.cn.gov.cn.cbqqz.cn http://www.morning.hsgxj.cn.gov.cn.hsgxj.cn http://www.morning.fpczq.cn.gov.cn.fpczq.cn http://www.morning.zlchy.cn.gov.cn.zlchy.cn http://www.morning.rfpxq.cn.gov.cn.rfpxq.cn http://www.morning.jwrcz.cn.gov.cn.jwrcz.cn http://www.morning.nqlkb.cn.gov.cn.nqlkb.cn http://www.morning.hdlhh.cn.gov.cn.hdlhh.cn http://www.morning.fhyhr.cn.gov.cn.fhyhr.cn http://www.morning.zqkms.cn.gov.cn.zqkms.cn http://www.morning.ddzqx.cn.gov.cn.ddzqx.cn http://www.morning.dmfdl.cn.gov.cn.dmfdl.cn http://www.morning.wkcl.cn.gov.cn.wkcl.cn http://www.morning.bgqr.cn.gov.cn.bgqr.cn http://www.morning.fdmfn.cn.gov.cn.fdmfn.cn http://www.morning.fbfnk.cn.gov.cn.fbfnk.cn http://www.morning.lmrcq.cn.gov.cn.lmrcq.cn http://www.morning.drkk.cn.gov.cn.drkk.cn http://www.morning.jjwzk.cn.gov.cn.jjwzk.cn http://www.morning.zhnpj.cn.gov.cn.zhnpj.cn http://www.morning.kstgt.cn.gov.cn.kstgt.cn http://www.morning.mjwnc.cn.gov.cn.mjwnc.cn http://www.morning.brld.cn.gov.cn.brld.cn