promise的基本用法

promise的用法

promise是一个构造函数,自身有all,resolve,reject等方法,原型上有then,catch等方法。并且它new的实例对象特包含这些方法。通常将他包在一个函数中然后返回一个promise对象。

function hins(){
	let name = new Promise(function(resolve,reject){
	setTimeout(function(){
	console.log('异步执行完成')resolve('hinschueng')
	},1000);
});
	return name
}
hins().then(function(data){
console.log(data)
})

promise接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。从表面上看,Promise可以简化层层回调的写法,即解决回调地狱的问题,但实质上,Promise的精髓是“状态”,用维护状态、传递状态的方式来使得回调函数能够及时调用。正确用法如下:

		function Hins(){
   				var name = new Promise(function(resolve,reject){
                setTimeout(function(){
                    console.log('异步执行完成1');
                    resolve('hinschueng');
                },1000);
            });
            return name
        }
        function Hins1(){
            var name = new Promise(resolve =>{
                setTimeout(function(){
                    console.log('异步执行完成2');
                    resolve('yin')
                },2000)     
            });
            return name
        };
        function Hins2(){
            var name = new Promise(resolve => {
                setTimeout(function(){
                    console.log('异步执行完成3');
                    resolve('jiao')
                },3000);
            });
            return name
        }
        Hins()
        .then(function(data){
            console.log(data);
            return Hins1()
        })
        .then(data =>{
            console.log(data);
            return Hins2()
        })
        .then(data =>{
            console.log(data);
        })

reject和catch
reject的作用就是把Promise的状态变成"rejected",然后在then中执行“失败”的回调函数。

function Num(){
	var p = new Promise((resolve,reject) => {
		var n=2;
		if(n>3){
		resolve(n)
		}else{
		reject('数字太小了')
		};
		});
	return p
	}
	Num()
	.then(data => {
	console.log(data)
	},
	reason =>{
	console.log(reason)
	})

catch的效果是和写在then里第二个参数一样,但是它有另一个作用:在执行resolve的回调函数时,如果抛出错误,不会报错卡死js,而是进入catch方法中。效果如下:

Num()
.then(data =>{
console.log(data);
console.log(somedata);//这个somedata没有定义
})
.catch(reason =>{
console.log('我被执行了')
console.log(reason)
})
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值