异步可以多条任务线去执行程序,一条任务卡顿不影响其他任务。
例如打电话与发短信
1使用回调函数获取异步数据
//ajax 与服务器通信 ,异步获取数据
// let target = "hello world";
// // 获取数据的方法 :只能通过getData获取数据
// // 1.回调函数
// function getData(fn){
// setTimeout(()=>{
// fn(target);
// },500)
// }
2使用promise对象获取数据
Promise是ES2015专门用来解决异步函数的对象;
then方法是用来执行异步操作的,所以先执行其它语句,再执行then方法;
// // 2.用promise对象获取数据
// let target = "hello world";
// function getData(){
// return new Promise((result)=>{
// setTimeout(()=>{
// result(target)
// },500)
// })
// }
// let p = getData(); // 由于返回值是promise 所以这里的P是一个promise对象
// p.then((data)=>{
// console.log(data)
// })
async函数解决异步问题
需要结合promise来使用
async function (){} 与普通函数的区别在于可以使用await(等待),在其后面可以添加promise对象,promise对象一定会有一个(形参)来返回数据,通过await的方式不需要再使用promise对象的then函数来获取数据,而是直接通过赋值来获取数据
await函数:在多个获取的时候,可以实现等待功能 前一个完成才会运行后一个,而普通函数只会从上到下一次性执行完毕;
async function fun(){
let data1 = await getData();
console.log(data1)
let data2 = await getData();
console.log(data2)
let data3 = await getData();
console.log(data3)
}
fun();