【一文了解】Promise承诺对象

在我刚开始看Primise对象时,博文的长篇大论亦或官方的说法都很难让人豁然开朗,给人的感觉就是我还没有了解这是什么东西,就给我扯一堆大道理,所以这篇文章我想试着一步一步实践+解惑,文章深度可能不深,但对于小白很友好也足够你了解Promise对象。

举个例子,Promise对象就像是ajax,ajax等待响应之后进入成功函数或者是失败函数。如果一直没有响应成功或者失败,函数是不会调用的(先不算设置超时时长)。但它俩不是一个东西,只是相似。

所谓Promise,简单说是一个容器,里面保存着某个未来才会结束的事件(是一个异步操作)的结果。
这句话用代码解释:

let flag=true;
let promise=new Promise(function(resolve,reject){
				setTimeout(function(){
					if(flag){
						resolve("success");
					}else{
						reject("error");
					}
				},2000)
			});

这就是未来的两秒后反回的结果,success或者error;
打个比方这个函数可以想成两天后我生日,Promise这个朋友承诺把鼠标当做礼物给我,如果兑现了我还需要买个鼠标垫,但承诺也有无法兑现的时候,没有兑现我就要自己买个鼠标和鼠标垫。
所以承诺有三个状态:

  1. pending(进行中,承诺说出口时)
  2. fulfilled(已成功,pending=>承诺兑现)
  3. rejected(已失败,pending=>承诺无法兑现)

换成代码就是:

promise.then(function(x){
				console.log(x+":Buy mouse pad");
				}).catch(function(y){
					console.log(y+":Buy mouse pad and mouse");
				});

每一个Promise实例,都具有then和catch方法,fulfilled(成功)就找then方法,rejected(失败)就被catch方法捕获。前提需要等到promise调用resolve或者reject函数,否则一直不会执行之后的then或catch

  • then方法是实例Promise时的第一个参数resolve的调用
  • catch方法是实例Promise时的第二个参数reject的调用

突然想起来,Promise兑现承诺我还可以买一个键盘,换成代码:

promise.then(function(x){
				return x+":Buy mouse pad";
				}).then(function(x){
					console.log(x+" and a keyboard");
				}).catch(function(y){
					console.log(y+":Buy mouse pad and mouse");
				})
//fulfilled=success:Buy mouse pad and a keyboard
//rejected=error:Buy mouse pad and mouse

总结:
如果不用Promise就需要写一层一层的嵌套代码。有了Promise,为异步操作提供了统一的接口,让代码不陷入回调嵌套的死路中,它的强大之处在于它的链式调用。状态为fulfilled执行then方法,catch是没兑现时的原因说明。简单的了解是为了之后更深入的探索

发布了31 篇原创文章 · 获赞 45 · 访问量 5887

猜你喜欢

转载自blog.csdn.net/weixin_43623808/article/details/103461696