# 异步
# 异步和同步的区别
- 异步基于js单线程
- 异步不会阻塞代码的执行
- 同步会阻塞代码的执行
# 为什么js是单线程?
同一个时间只能做一件事。(如果是多线程 一个线程查找DOM,一个线程删除DOM)
# 为什么js中存在异步?
因为如果所有js代码都是同步,一个同步任务padding了,后面的都需要等待,此时页面就会出现卡死,由于js单线程的机制才有了异步 。
# 异步使用场景?
- 网络请求 比如 ajax请求 图片加载onload处理回调
- 定时任务 setTimeOut
# promise异步加载图片
function imgLoad(url) {
return new Promise(((resolve, reject) => {
const img = document.createElement('img');
img.src = url;
img.onload =function () {
resolve(img)
};
img.onerror =function () {
const err = new Error(`发生错误${url}`);
reject(err)
}))
}
const url = 'https://doc.yixiang.co/img/pc1.png';
imgLoad(url).then(function (res) {
console.log('res',res)
}).catch(function (err) {
console.log('发生错误',err)
});