ES6异步发送AJAX
异步与同步的区别
- 同步:在上一个操作没有执行完前,下一个操作必须排队等待
- 异步:CPU先把当前操作耽搁不执行,等主线任务执行完后再执行
ES6前的异步操作
- 在ES6发布之前,要操作异步,只能使用递归或者回调函数来操作,但是这样会使得代码可读性差,难维护。
- js的运行机制是单线程的,它首先会执行同步的操作,再按照代码的位置先后顺序执行异步操作。
- js 中的核心异步执行函数是定时器和ajax
setTimeout(console.log, 0, 1);
console.log(2);
// 2
// 1
分析
这里,定义了一个setTimeout(),0ms后执行console.log(1),他的等待时间是0,并且它在console.log(2)前面。正常理解应该是先输出1,再输出2,但是并不是。这是因为setTimeout是异步执行函数,console.log是同步执行函数,在运行到setTimeout时,js引擎会把他先放进一个任务队列中,先不执行,接着运行console.log(2),直接输出控制台,同步函数执行完后再执行任务队列中的console.log(1)
任务: 实现一个获取新闻内容与评论的功能
分析
- 分为两步:
- 根据newsId请求相应的新闻内容以及该新闻对应的评论的资源地址
- 根据上一次请求返回的评论URL地址,再次发送请求,获取对象的新闻
普通方法
// ajax请求
// 1. 根据newsId获取新闻
function getNews(path, getComment){
$.get(path, (data) => {
data = JSON.parse(data); // 将json对象装换成js对象
displayNews(data); // 展示新闻内容
getComment(data.commentUrl); // 获取新闻评论
})
}
function getComment(url){
$.get