概述
1、promise在定义的时候就执行
const a = new Promise((resolve,reject)=>{
console.log("Promise 执行")
})
// Promise 执行
2、async修饰的函数不管有没有return,都会返回一个Promise对象,如果有return b,则b相当于在resolve(b)。async修饰的函数不会像Promise那样在定义的时候就会执行,而是要调用时才会运行
const fn = async ()=>{}
fn() // Promise {<fulfilled>: undefined}
const fn2 = async ()=>{
return 1
}
fn2().then(res=>{
console.log("fn2的return=",res)
}) // fn2的return=1
3、不管是Promise对象内部的回调函数,还是 async修饰的函数,其在主线程中都是串行执行的,本身与异步函数没关系,只有其内部调用了异步函数才另起线程并行于主线程。
const p = new Promise((resolve,reject)=>{
console.log("我虽然在Promise回调函数中,但我属于主线程串行执行部分")
setTimeout(()=>{
console.log("我是Promise回调函数中的异步执行部分,要等到主线程都执行完了才轮到我出场")
resolve("异步返回")
},1000)
})
const fn = async ()=>{
console.log("我在是async修饰的函数里,但我属于主线程串行执行部分")
await 1
console.log("await后的代码放要等到await修饰的函数执行完才能串行执行,此时我们相当于await修饰的异步线程的一部分了,就好像我们不是主线程一样")
}
console.log("主线程执行1")
//我虽然在Promise回调函数中,但我属于主线程串行执行部分
//我在是async修饰的函数里,但我属于主线程串行执行部分
//主线程执行1
//1
//await后的代码放要等到await修饰的函数执行完才能串行执行,此时我们相当于await修饰的异步线程的一部分了,就好像我们不是主线程一样
4、resolve 在Promise中,不管是不是放在异步函数中(例如setTimeout),其返回的东西统统按照异步函数返回的东西来处理。
const p = new Promise((resolve,reject)=>{
console.log("我虽然在Promise回调函数中,但我属于主线程串行执行部分")
//resolve(1) 或
setTimeout(()=>{
resolve(2)
},1000)
})
//不管resolve是否在setTimeout中,1或2都视为异步函数执行后的结果了,即只要是.then(res=>{})中的res都是异步结果
5、await 修饰的东西默认是一个Promise对象,就算不是promise对象,如上面例子中就是个1,也要把它当做resolve 1 来处理。
6、async await对比Promise的优势在于可以将并行线程串行化,写起来比较好理解,且能够弥补Promise在多个then链式调用时难以准确catch哪条错误的问题(await 使用传统的try catch即可),但是我们需要知道异步任务串行地场景,一般是后一个异步任务依赖于上一个异步任务地结果,此时才需要串行异步任务。但是多个互相无依赖关系地异步任务是不需要串行的,强行使用串行反而会降低执行效率 。
7、async await如何捕获错误
const fn = async ()=>{
try{
await new Promise((resolve,reject)=>{
setTimeout(()=>{
if(1){reject(2)}else{resolve(1)}
},1000)
})}catch(err){
console.log(err)
}
}
fn()
//Promise {<pending>}
//2
(1秒后打印)
const fn = async ()=>{
let abc = await new Promise((resolve,reject)=>{
setTimeout(()=>{
if(1){reject(2)}else{resolve(1)}
},1000)
})
console.log(abc)
}
fn()
//Promise {<pending>}
//Uncaught (in promise) 1
程序被中断
最后
以上就是兴奋月饼为你收集整理的promise 与 async await的几点总结的全部内容,希望文章能够帮你解决promise 与 async await的几点总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复