Promise async await
新手学习 有问题欢迎指出
概念
- Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值
三个状态
pending //预备状态 没成功,也没失败
fulfilled //请求成果
rejected // 拒绝 请求失败
用法
promise 配合async 和 await使用最佳 async会隐式的返回一个promise
// 下面的promise传两个参数 一个是成功,一个是失败 其也可以传参 参数为需要返回的结果
function Random_(flag) {
return new Promise((resolve, reject) => {
console.log("开始摇 ")
setTimeout(() => {
let n = parseInt(Math.random() * 6 + 1, 10) //1~6
if (n > 3) {
if (flag === "big") {
resolve(n)
} else {
reject(n)
}
} else {
if (flag === "small") {
resolve(n)
} else {
reject(n)
}
}
}, 1000)
})
}
// 写法一 then解析执行的promise返回的结果 第一个函数是成功 参数是promise返回的结果 第二个参数是reject拒绝的结果 参数也是值
async function Use() {
let res = await Random_("big").then((succ)=>{
console.log("猜对了",succ)
},(fail)=>{
console.log("猜错了",fail)
})
}
Use()
// 写法二
try {
let res = await Random_("big") //返回的直接是参数 不是promise对象
console.log("点数是", res)
console.log("执行ok 猜对了")
} catch (error) {
console.log("点数是", error)
console.log("执行失败 catch了")
}
promise.all 方法
- 普通的promise.all方法 不适用await
- 需要用then解析成功与否 两个都成功(resolve)才会调用 第一个
Promise.all([Random_('big'), Random_('big')])
.then((n)=>{console.log(' 的点数是'+n+'你猜中了')}
, (error)=>{console.log(' 的点数是'+error+'你又输光了')})
- 使用异步 用try catch捕获执行失败的处理
try{
let res = await Promise.all([Random_("big"),Random_("big")]) //返回一个数组 数组的值分别是 函数返回的结果 结果 res (2) [4, 4]
}catch{
xxx
}
- promise.race
Promise.race([promise1, promise2]).then(success1, fail1)
只要有一个成功就会执行success 有一个失败就会调fail
总结:
- 个人感觉async没办法把结果return出去 所以在react中 可以直接setstate() 直接取出
- async可以try cache 不用.then来处理 不.then返回的就是一个promise对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?