# 异步

# 异步和同步的区别

  • 异步基于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)
    });