1.异步——不能直接拿到结果
2.同步——能直接拿到结果
3.回调——写一个函数被别人调用
4.异步与回调关系:
关联:
异步任务需要在得到结果时通知JS来拿结果,可以让JS留一个函数地址给浏览器,异步任务完成时浏览器调用该函数的地址,同时把结果作为参数传给该函数。这个函数就是写来给浏览器调用的(回调函数)
区别:
异步任务需要用到回调函数来通知结果,但回调函数不一定只用在异步任务里,回调可以用到同步函数李
判断异步函数
1.setTimeout
2.AJAX
3.AddEventListener
异步任务若有两个结果成功或失败
1.回调接受两个参数
2.搞两个回调
这两个方法有不足:
1.名称不规范
2.容易出现回调地狱
getUser(user=>{
getGroups(user,(groups)=>{
g.filter(x=>x.ownerId===user.id)
.forEach(x=>console.log(x))
})
})
})
3.很难进行错误处理
解决回调问题——1976年出现Promise思想
封装ajax
改用Promise写法
Promise简单的使用
1.
return new Promise((resolve,reject)=>{...})
任务成功则调用resolve(result)
任务失败则调用reject(error)
resolve和reject会再去调用成功和失败函数
2
使用.then(success,fail)传入成功和失败函数