Promise学习笔记

promise笔记

promise构造函数方法

Promise.resolve(p1) //无论参数如何 都是成功 返回值为参数类型(promise或具体的值)

Promise.reject(p1) //无论参数如何 都是失败 返回值为参数类型(promise或具体的值)

Promise.all([p1,p2,p3]) //如果数组中全为成功 则返回数组 如果为失败 则返回失败的那个数组参数 Promise.race([p1,p2,p3]) //数组中 谁先回调函数 则返回对应的数组参数(无论成败)

Promise状态修改

resolve(参数) pending->fulfilled/resolved reject(参数) pending->rejected throw '出问题了' pending->rejected

 

primise注意事项

为一个promise函数指定多个回调(失败/成功) 当状态改变时都会调用 如果是未定义的pending状态则不调用 改变状态与指定回调的先后问题 如果是同步任务 就是 状态和执行回调同步执行 如果是异步任务 就是 改变状态后再执行回调

then中执行的是异步回调 要先等同步回调完成后再处理 then方法返回的是一个promise对象 该promise对象的数据作为该then的返回数据 链式串联多个任务: 前提 都得是成功的情况下 上一个then中的return 如果是一个promise 则该promise的值 作为下一个then的value值 如果没有return 则下一个then的value值是undefined

p.then(value=>{ return new Promise((resolve,reject)=>{ resolve('ok') }) }).then(value=>{ console.log(value) //这个value是ok }).then(value=>{ console.log(value) //这个value是undefined })

 

异常穿透

当使用promise的then链式调用时,可以在最后指定失败的回调catch 如果前面任何操作出现失败 都会传到最后失败的回调中处理

p.then(value=>{ return new Promise((resolve,reject)=>{ reject('err') }) }).then(value=>{ console.log(value) //这个value是ok }).then(value=>{ console.log(value) //这个value是undefined }).catch(reason=>{ console.warn('在最后的catch中处理失败'+reason) })

异步函数中不要定义错误reject 比如定时器 否则会报错

async和await

async 函数的返回值是promise对象 promise对象的结果由async函数执行的返回值决定

await右侧的表达式一般为promise对象 1、如果是promise对象,await返回的是promise成功的值 2、如果是其他,直接将此值作为await的返回值

await必须在async函数中 async可以没有await 如果await的promise失败了 则抛出异常 相应try...catch进行捕获

/----------------------------------------------------------------------/ util包中的promisify() 可以将api转化为promise型的函数 比如promisify(fs.readFile)

 

posted @   kq1024  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示