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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具