课程名称:await 函数用法
课程章节:继发和并发
课程讲师: Alex
课程内容:
为什么要处理并发和继发
因为场景需求不同,所以需要采取不同的方式来处理数据,那么,就有继发和并发两种方式处理方式,其中继发一般是指需要拿到上一个网络请求返回的数据后,再根据返回的数据进行下一个网路请求,并发指的是同时发送多个网络请求。以前是使用Promise来处理这些问题,后来es的新语法中引入了async/await,所以更推荐使用async/await语法替代来实现这个效果,让代码书写起来更加简洁,易读。
1、继发
一个执行完再执行下一个。
案例参考广告显示、隐藏。
// 1.使用 async/await 处理继发问题
function wait(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
});
}
function getJSON(url) {
return new Promise(resolve => {
const xhr = new XMLHttpRequest();
xhr.addEventListener(
'load',
async () => {
if (
(xhr.status >= 200 && xhr.status < 300) ||
xhr.status === 304
) {
// 模拟网络延迟
await wait(1000);
resolve(xhr.response);
}
},
false
);
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.send(null);
});
}
// (async () => {
// const url = 'https://www.imooc.com/api/http/search/suggest?words=';
// // const result = await getJSON(`${url}js`);
// // console.log(result);
// const { data } = await getJSON(`${url}js`);
// console.log(data);
// const result = await getJSON(`${url}${data[0].word}`);
// console.log(result);
// })();


2、并发
不需要等上一个只执行完,下一个才执行。可以同时执行。
处理异步操作时,如果不存在继发关系,最好让它们并发执行。
可以先执行异步操作,再 await 等待结果;
也可以通过 Promise.all 让异步操作并发执行;
// 2.使用 async/await 处理并发问题
// 处理异步操作时,如果不存在继发关系,最好让它们并发执行
// 可以先执行异步操作,再 await 等待结果
// 也可以通过 Promise.all 让异步操作并发执行
(async () => {
const url = 'https://www.imooc.com/api/http/search/suggest?words=';
// 继发
// const { data } = await getJSON(`${url}js`);
// console.log(data);
// const result = await getJSON(`${url}json`);
// console.log(result);
// 并发
// const jsPromise = getJSON(`${url}js`);
// const jsonPromise = getJSON(`${url}json`);
// const jsResult = await jsPromise;
// const jsonResult = await jsonPromise;
// console.log(jsResult, jsonResult);
// Promise.all 并发
// Promise.all([getJSON(`${url}js`), getJSON(`${url}json`)]).then(
// datas => {
// console.log(datas);
// }
// );
const datas = await Promise.all([
getJSON(`${url}js`),
getJSON(`${url}json`)
]);
console.log(datas);
})();课程收获:
老师讲的非常细致,通俗易懂。这一节学的是 用async/await解决继发和并发问题,通过学习我了解了为什么要解决继发和并发的问题 ,但是并不是很理解,再复习复习,期待明天的学习 。
随时随地看视频