异步(promise)和单线程

一,异步和单线程

1,同步和异步的区别

(1)基于JS是单线程语言 只能做一件事儿(异步是由于单线程而来)
(2)异步不会阻塞代码执行
(3)同步会阻塞代码执行

遇到等待(网络请求,定时任务)不能卡住。不然界面会卡在那动不了
所以需要异步(就是解决单线程)
浏览器和node.js已经支持JS启动进程,比如Wbeworker
回调callback函数形式
基于JS是单线程语言 异步不会阻塞代码的执行
Promise 异步主要是解决回调地狱的问题

2,手写Promise加载一张图片(代码演示)

//手写Promise加载一张图片(代码演示)
function loadImg(src) {
    return new Promise((resolve, reject) => { //返回一个new Promise
        const img = document.createElement('img')
        img.onload = () => { //加载完成之后的一个回调函数
            resolve(img) //执行完之后再把img返回
        }
        img.onerror = () => {
            reject(new Error(`图片加载失败 ${img}`)) //出现问题就调用这个Error
        }
        img.src = src
    })
}
// 执行函数 返回的是一个Promise对象 而对象里面有一个then  成功的话得接收img
// loadImg(url).then(img => {
//     console.log(img.width);
//     return img  //这个img就会被传入到下一个then函数里面
// }).then(img => {
//     console.log(img.height);
// }).catch(ex => {
//     console.log(ex);
// })
const url1 = 'https://himg.bdimg.com/sys/portraitn/item/public.1.ba5c74eb.V4uF1WBpKGR6GvjDHOlkrA'
const url2 = 'https://www.baidu.com/img/flexible/logo/pc/result.png'
loadImg(url1).then(img1 => {
    console.log(img1.width);
    return img1 //返回一个img1对象
}).then(img1 => {
    console.log(img1.height);
    return loadImg(url2) //返回一个promise实例
}).then(img2 => {
    console.log(img2.width);
    return img2
}).then(img => {
    console.log(img.height);
}).catch(ex => {
    console.log(ex);
})

3,异步应用场景

网络请求 ajax图片加载
定时任务 setTimeout
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值