promise,async和await的使用

本文深入探讨了JavaScript中async/await与Promise的使用方法,包括如何通过async函数执行返回Promise的函数,处理异步代码使其更接近同步代码的编写方式,以及如何使用Promise.all处理多个Promise的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

await后面接一个会return new promise的函数并执行它
await只能放在async函数里

  1. 使用async和await获取成功结果
function yao(){
	return new Promise((resolve,reject){
		let  sino = parseInt(Math.random()*6+1)
		setTimeout(()=>{
			resolve(sino)
		},3000)
	})
}
asnyc function test(){
	let = await yao()
}
test()

async中使 await yao() 先执行,等到三秒后执行完再把得到的结果赋值给左边的n,也就是说test函数需要三秒钟才执行完成,所以test函数是异步的,因此前面必须写async

  1. 获取失败的结果
function yao(reason){
	return new Promise((resolve,reject)=>{
		let sino = parseInt(Math.random()*6+1)
		
		if(sino>3){
			if(reason == '大'){
				resolve(sino)
			}else{
				reject(sino)
			}
		}else{
			if(reason == '大'){
				reject(sino)
			}else{
				resolve(sino)
			}
		}
	})
}
async function test(){
	// await和成功之后的操作放到try里,失败的放在catch
	try{
		let n = await yao('大')
		console.log('赢了'+n)
	}catch(error){
		console.log('输了'+error)
	}
	
}
test() 

使用await使我们的异步代码,更像同步的代码

  1. 如果有多个promise,怎么拿到所有的promise都结束后的结果?
    比如有两个色子,我想得到这两个色子的点数
//方法一
function yao(reason){
	return new Promise((resolve,reject)=>{
		let sino = parseInt(Math.random()*6+1)
		if(sino>3){
			if(reason == '大'){
				resolve(sino)
			}else{
				reject(sino)
			}
		}else{
			if(reason == '大'){
				reject(sino)
			}else{
				resolve(sino)
			}
		}
	})
}
// Promise.all里面是一个数组
// then两个参数fn
	// 第一个参数:调用成功,返回所有promise的结果,是一个数组的形式,
	// 第二个参数拿到的是第一个失败的值
Promise.all([yao('大'),yao('大'),yao('大'),yao('小')]).then(
	(x)=>{  //成功的数组
		console.log("x")
		console.log(x)
	},
	(y)=>{ //失败的第一个结果
		console.log("y")
		console.log(y)
	}
)
// 2.使用await
async function test2(){
	// await和成功之后的操作放到try里,失败的放在catch
	try{
		let n = await Promise.all([yao('大'),yao('大'),yao('大'),yao('小')])
		console.log(n) //所有都成功返回一个数组
	}catch(error){
		console.log(error) //返回第一个失败的数据
	}
}
test2()

以上是promise的一些异步使用,配合async和await使用更方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值