排在异步任务后面的代码,不等待异步任务结束,而是会马上运行。也就是说,异步不会阻塞后面的任务。
这种不连续的执行,就叫做异步(setTimeout、ajax请求都是常见的异步操作);
![](https://i-blog.csdnimg.cn/blog_migrate/e824b2e5632cee9fc484881886efa762.jpeg#pic_center)
连续的执行,就叫做同步:
![](https://i-blog.csdnimg.cn/blog_migrate/7613da86ffbc4016a7a58e435c880083.jpeg#pic_center)
通常情况下,浏览器向服务器发送请求,服务器返回数据,浏览器执行异步操作。在这里使用定时函数模拟异步请求数据。
方法一 使用回调函数
function doSomething(callback) {
setTimeout(function () {
console.log('执行结束');
let result = 2;
callback(result);
}, 1000);
}
function callback(result) {
console.log(result);
}
callback(1) // 如果不作为回调函数直接调用的话,立即执行输出1
doSomething(callback); // 1000ms后输出2(写法一)
doSomething((result)=>{ console.log(result)} ); // 1000ms后输出2(写法二)
方法二 Promise对象
function doSomething() {
return new Promise(function (resolve) {
setTimeout(function () {
console.log('执行结束');
let result = 6;
resolve(result);
}, 1000);
});
}
doSomething().then(result => {
console.log('接收到结果为:' + result);
})
方法三 async
function doSomething() {
return new Promise(resolve => {
setTimeout(() => {
let result = 6;
resolve(result);
}, 1000);
});
}
async function action() {
let result = await doSomething();
console.log(result);
}
action()