了解异步编程

异步编程

概念

同步按代码顺序执行,异步不按照代码顺序执行,异步就是从主线程发射一个子线程来完成任务,执行效率更高。

我们常常用子线程来完成一些可能消耗时间足够长以至于被用户察觉的事情,比如读取一个大文件或者发出一个网络请求。

子线程局限:一旦发射了以后就会与主线程失去同步,我们无法确定它的结束,如果结束之后需要处理一些事情,比如处理来自服务器的信息,我们是无法将它合并到主线程中去的。

为了解决这个问题,JavaScript 中的异步操作函数往往通过回调函数来实现异步任务的结果处理。

回调函数

回调函数是一种以参数形式传递给另一个函数的函数。

异步任务的回调函数在异步任务结束后执行

示例:

function print() {
    document.getElementById("demo").innerHTML="RUNOOB!";
}
setTimeout(print, 3000);

//以上可简写为:
setTimeout( ()=>{
    document.getElementById("demo").innerHTML="hello!";
}, 3000)

这个函数执行之后会产生一个子线程,子线程会等待 3 秒,然后执行回调函数 “print”。在这3s期间,主线程不会停止,而是按顺序执行其他代码

异步 AJAX

除了 setTimeout 函数以外,异步回调广泛应用于 AJAX 编程。

var xhr = new XMLHttpRequest();
xhr.onload = function () {
    // 输出接收到的文字数据
    document.getElementById("demo").innerHTML = xhr.responseText;
}
xhr.onerror = function () {
    document.getElementById("demo").innerHTML = "请求出错";
}
// 发送异步 GET 请求
xhr.open("GET", "http://152.136.148.31:7401/portal/gnvq/getCatList", true);
xhr.send();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值