异步解决方案发展 加深async await理解

本文详细介绍了JavaScript中异步编程的概念,从回调函数到Promise,再到现代的async/await。讲解了await如何阻塞代码但不阻塞执行流程,并通过实例解析了异步任务的执行顺序。帮助开发者更好地理解和运用异步控制流。
摘要由CSDN通过智能技术生成

异步

AJAX

可以实现与服务器的异步通信

局部刷新页面

异步解决方案的发展

1.回调函数

2.Promise

3.generator

4.async / await

Promise

new Promise是一个同步任务 但是then方法是一个异步任务

async/await

async:定义一个异步函数,异步函数的返回值是一个promise对象

await 一般用于等待一个promise对象 实际上就是等待一个异步处理结果 他会阻塞后面的代码 但实际不会看成异步 如果有一个异步任务

和它阻塞的代码同时面临运行 会先执行await 再去异步任务then方法

async function main() {
  const data = 'aaa';
  console.log(data);
  return data;
}
const qt = main();
console.log(qt);

这样的输出结果是aaa Promise{‘aaa}

async function main() {
  const data = await Promise.resolve('axy')
  console.log(data);
  return data;
}
const qt = main();
console.log(qt);

这样先输出结果Promise{} axy

await会阻塞await下面的代码执行

function foo() {
  console.log('1');
  return '2';
}
 async function bar() {
  console.log('3');
  await Promise.resolve('4')
}
async function main() {
  console.log('5');
    //会执行foo() 但是不会去赋值给v1 要等同步任务完事才去赋值 
  const v1 = await foo();
  console.log(v1);
  const v2 = await bar();
  console.log(v2);
}
main()
console.log('6');
//输出是5 1 6 2 3 4 

首先执行main函数输出5 完了const v1 那句话 后面的await是等一个结果 首先会调用foo()函数 但是不会去赋值给v1 因为await等到结果之后就会阻塞后面代码执行 调用之后输出1 没赋值给v1

接着就会执行最后一句输出6 同步任务完事之后回去执行await后面的代码

把2赋值给v1 输出v1(输出2)

在执行下面的 还是同理 先调用输出3 没来得及赋值 但是因为没有同步任务了 所以继续赋值输出v2

还有一个吊炸天的题 蜗牛学苑p374 第20分钟最后一道题 就是下面这个

await会阻塞后面的代码 但实际不会看成异步 如果有一个异步任务

和它阻塞的代码同时面临运行 会先执行await 再去异步任务then方法

要理解阻塞和异步是两个概念 当执行到v2的时候 会阻塞一波 这个时候就去执行下面的异步代码then 异步任务完事再去执行下面的输出 也就是被阻塞的

function foo() {
  console.log('1');
  return '2';
}
 async function bar() {
  console.log('3');
  return Promise.resolve('4')
}
async function main() {
  console.log('5');
  const v1 = await foo();
  console.log(v1);
  const v2 = await bar();
  console.log(v2);
}
main()
var promise  = new Promise((resolve) => { //promise是同步的
  console.log('7');
  resolve('8');
});
promise.then((val) => console.log(val));  //then是异步的
console.log('6');
//5 1 7 6 2 3 8 4 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值