当前位置: 首页 > news >正文

如何用dw做网站首页/网站流量排名

如何用dw做网站首页,网站流量排名,平面设计公司平面图,网站页面设计图片素材问题导向 async await是什么? 如何使用?promise如何处理错误?宏任务和微任务? 如果你都有了答案,可以忽略本文章,或去JS学习地图寻找更多答案 async await 是什么? generator和promise的语法糖 async n…

问题导向

async await是什么? 如何使用?promise如何处理错误?宏任务和微任务?

如果你都有了答案,可以忽略本文章,或去JS学习地图寻找更多答案


async await

是什么?

generator和promise的语法糖
async = new Promise
await = then函数的语法糖
try-catch = catch注意:
1.await必须写在aysnc函数中,但async函数中可以没有await
2.必须使用try catch 才能捕获失败的结果

async函数

async函数的返回值是一个promise对象,结果的状态根据函数返回的状态决定

async函数中:
1,返回的普通值/对象会封装成promise对象
2,await后可追加普通值,函数,async函数
3,await后如果是值,会封装成promise对象
4,await后如果是rejected态,会报错
5,await的下面,才是回调的异步代码,await和之前不是

//await 后是 promise对象
!(async () => {const p = Promise.resolve(300)  //返回promise对象const data = await p  //await 相当于thenconsole.log(data)  //300
})()
​
​
//await 后是 普通值
!(async () => {const p = Promise.resolve(300)const data = await 400  //await Promise.resolve(400),相当于封装了console.log(data)  //400
})()
​
​
​
//await 后是 async函数
async function fn(){retrun Promise.resolve(200)
}
!(async () => {const p = Promise.resolve(300)const data = await fn()  //await Promise.resolve(200),相当于封装了console.log(data)  //200
})()//try.catch
async function fn() {return Promise.reject('error')
}
!(async () => {try {const p = Promise.resolve(300)const data = await fn() //返回rejected态console.log(data)} catch (e) {console.log(e)  //error}
})()//async 的回调
async function foo(){consolo.log(2)await bar()  console.log(5)  //以下是异步代码,放到webapi中处理
}async function bar(){consolo.log(3)
}
​
consolo.log(1)
foo()
consolo.log(4) //同步代码执行完毕

await表达式

await右侧表达式为promise,得到的结果就是promise成功的结果
await右侧表达式非promise,得到的结果就是它本身的值async function fn(){try{const value = await bar() //value:6const value = await Promise.resovle('成功的值') //value:'成功的值'await Promise.reject('失败的值')console.log(value)}catch(error){console.log(error) //'失败的值'}
}
function bar(){return 6
}

多种声明方式

//函数声明
async function get(name){return await ajax('xxx')
}//函数表达式
let get = async function(name){return await ajax('xxx')
}//对象
let hd = {async get(name){return await ajax('xxx')}
}//类的写法
class User{async get(name){return await ajax('xxx')}
}

for…of在异步中的使用

function mutl(num){return new Pormise(resovle => {settimeout(() => {resovle(num * num)},1000)})
}let arr = [1,2,3]
​
一次执行完,1秒后打印全部结果
arr.forEach(async (i) => {const res = await mutl(i)consolo.log(res)  //1秒后全部打印出来
})
​
​
每隔1秒打印1(async () => {for(let i of arr){const res = await muti(i)console.log(res)  }  
})()

错误处理

单独处理错误:写在then的第二个参数中
统一处理错误:写在catch中即使前面的异步操作出现异常,但是不希望影响后续操作
let p4 = () => Promise.reject('hello')
async function fn(){try{await p4()}catch(e){console.log(e)}return await 100 //代码执行完上面try中的错误,仍然会执行这句代码
}
fn().then(res => {console.log(res)
}) //hello 100

并行与串行

串行:先后执行先执行p1,再执行p2
let getP1 = () => {return new Promise((resolve) => {setTimeout(() => {resolve('p1')}, 2000)})
}
let getP2 = () => {return new Promise((resolve) => {setTimeout(() => {resolve('p2')}, 2000)})
}
let fn = async () => {let result1 = await getP1()console.log(result1)let result2 = await getP2()console.log(result2)
}
fn() //共等待4秒,p1,2秒,然后p2再执行2秒
​
​​
//并行:同时执行
let getP1 = () => {return new Promise((resolve) => {setTimeout(() => {resolve('p1')}, 2000)})
}
let getP2 = () => {return new Promise((resolve) => {setTimeout(() => {resolve('p2')}, 2000)})
}
let fn = async () => {let dop1 = getP1()let dop2 = getP2() //两个同时开始let result1 = await dop1let result2 = await dop2console.log(result1, result2)
}
fn() //共等待2秒

Promise队列

必须等上一个promise完成,才会执行下一个promise

let p1 = Promise.resolve('大神')
promise = p1.then((v) => {return new Promise((resolve) => {setTimeout(() => {console.log('1')resolve()}, 1000)})
})
promise   //返回的promise赋值.then((v) => {return new Promise((resolve) => {setTimeout(() => {console.log('2')}, 1000)})
}).then((v) => console.log('66')) //不会执行,因为上面没有resolve

宏队列和微队列

在这里插入图片描述
JS是单线程

JS是单线程的,所有的任务都在一个时间线上执行,也就是说任务的执行都是有先后的,
为了更有效率,JS会在执行主线程时(代码的从上往下执行),
对程序中的所有事件任务划分同步和异步,同步的任务马上执行,
异步任务则放到任务队列中,在主线程执行完任务后,再从任务队列拿出任务执行。任务队列分为:宏队列和微队列,先执行微队列,再执行宏队列
​
//优先级划分
同步和异步:先执行同步,再执行异步
同步:同步按顺序,从上往下执行
异步:先执行微队列,再执行宏队列注意:
1.如果是同类型的,则按顺序上下执行
2.如果是定时器的,且都是宏任务的(内部没有微任务),
则按时间执行,如果时间相同,则按顺序上下执行
3.每次准备取出第一个宏任务执行前,微队列必须先执行完

执行顺序

//不同的任务,执行顺序也不同
setTimeout(() => {console.log('定时器') //输出顺序:5,异步宏任务
}2000)
setTimeout(() => {console.log('定时器') //输出顺序:4,异步宏任务,时间短
}1000)
Promise.resolve().then(value => {console.log('Promise') //输出顺序:3,异步微任务
})
console.log('xxx') //输出顺序:1,同步任务
for(let i = 0; i<10000; i++){console.log('2') //输出顺序:2,同步任务
}
new Promise((resolve,reject)=>{setTimeout(() => {console.log('定时器') //输出顺序:3异步宏任务resolve()}10)console.log('promise')   输出顺序:1这是属于同步任务
}).then((value) => console.log('成功'))  //输出顺序:4这是属于异步微任务
console.log('log')  //输出顺序:2
setTimeout(() => {console.log('定时器') //输出顺序:2Promise.resolve().then(value => {console.log('Promise') //输出顺序:3})
}1000)
setTimeout(() => {console.log('定时器') //输出顺序:4
}1000)
Promise.resolve().then(value => {console.log('Promise') //输出顺序:1
})

学习更多

JS学习地图

http://www.jmfq.cn/news/5194621.html

相关文章:

  • 网站建设公司浩森宇特/aso网站
  • 网站开发工作总结/百度站长工具怎么查排名
  • 如何做关于橱柜网站/推广怎么推
  • 微信做兼职什么网站好/金华seo全网营销
  • 网站建设插入图片怎么加/怎么建个人网站
  • 鄂州第一官方网站/亚马逊查关键词搜索量的工具
  • 用phpcms做的网站模板/如何查询百度搜索关键词排名
  • 结合七牛云 做视频网站/报个电脑培训班要多少钱
  • 卖东西的网站怎么建设/外国搜索引擎登录入口
  • 中国人做跨电商有什么网站/公司做网站推广
  • 做网站要求高吗/seo优化交流
  • 阿里巴巴网站中详情页怎么做/2022最近热点事件及评述
  • 苏州网站建设哪个比较牛/成都网站建设方案推广
  • 珠海网站建设培训学校/seo人人网
  • 经营性网站备案要求/百度账号个人中心
  • 如何创建个人app/东莞百度seo在哪里
  • 中国商标注册网/系统优化大师
  • 易语言做网站客户端/免费代理上网网站
  • 站长论坛/软文接单平台
  • 建筑工程网络图片/aso优化费用
  • 怎么用云主机做网站/淘宝关键词优化怎么弄
  • 合肥百度 网站建设/代发百度首页排名
  • 益阳网站建设公司/重庆森林在线观看
  • 企业做网站有发展么/长春今日头条新闻
  • 铁岭市网站建设公司/互联网推广渠道有哪些
  • wordpress 佛系汉化组/公众号排名优化软件
  • 王爷的疯狂绝望/郑州百度关键词seo
  • 网站建设端口/如何推广公司
  • 手机好在百度做网站吗/51网站统计
  • 成都市武侯区建设局门户网站/优秀软文范例100字