Promise 最简单的实现

<script type="text/javascript">		
			

			//自定义个promise类 ,就这里面写
			function P(executer){
				// 类里的方法,函数实例
				 const self = this;
				self.data = null;// 存放结果值
				self.callbacks = [];//存放异步操作回到的方法
				/**
						callbacks 里面存放的就是这个值
				{
					onResolved,onRejected			
				}**/	

				function resolve(value){
					self.data = value;
					// 真正去执行对结果的异步回调函数,走这个逻辑!
					setTimeout(function(){
						if(self.callbacks.length>0){
							// 在这里应该遍历去执行
							self.callbacks.forEach(item=>{
								item.onResolved(self.data);
							});
						}
					},1000);			
				}
				function reject(reason){
					self.data = reason;
					setTimeout(function(){
						if(self.callbacks.length>0){
							// 在这里应该遍历去执行
							self.callbacks.forEach(item=>{
								item.onRejected(self.data);
							});	
						}
					},1000);			

				}	

				// 执行执行器操作
				// 
				try{
				  // 这玩意是一个同步的执行器
				  executer(resolve,reject);
				  // 如果36行正确,则去执行 onResolved,onResolved)
				}catch(err){
					reject(err);
				}

			}

			// 类原型上的方法,可以通过对象去调用	
			P.prototype.then = function(onResolved,onRejected){
				this.callbacks.push({onResolved,onRejected});		
			}


			let p1 = new P((resolve,reject)=>{
				// throw new Error("sdfsd");
				reject(999);
			});

			p1.then((value)=>{
					console.log(value);
			},
			(reason)=>{
					console.log(reason);
			}	
			);

			// 这个时候我们看下结果,他会不会	
	</script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我了解你的问题。这里我将使用JavaScript语言来实现红绿灯的promise实现。 首先,我们需要定义一个函数来模拟红绿灯的变化过程。这个函数会接受两个参数,一个是颜色,另一个是时间。 ```javascript function changeLight(color, time) { return new Promise(function(resolve, reject) { setTimeout(function() { if (color === 'red') { console.log('红灯亮了'); } else if (color === 'green') { console.log('绿灯亮了'); } else if (color === 'yellow') { console.log('黄灯亮了'); } resolve(); }, time); }); } ``` 接下来,我们可以使用该函数来实现一个红绿灯的交替变化。具体来说,我们可以使用promise的then()方法来实现这个交替变化过程。 ```javascript changeLight('red', 3000) .then(function() { return changeLight('green', 2000); }) .then(function() { return changeLight('yellow', 1000); }) .then(function() { return changeLight('red', 3000); }); ``` 在这个例子中,首先我们调用了changeLight()函数,让红灯亮起来。然后我们使用then()方法来等待这个promise完成,并调用changeLight()函数让绿灯亮起来。接着我们再次使用then()方法等待第二个promise完成,并调用changeLight()函数让黄灯亮起来。最后,我们再次使用then()方法等待第三个promise完成,并调用changeLight()函数让红灯亮起来。这样,就实现了一个简单的红绿灯交替变化的效果。 希望这个例子能够帮助到你,如果你还有其他问题,可以继续问我哦。 ### 回答2: 要实现红绿灯的功能,可以使用Promise来管理灯的状态转换。首先,我们需要定义一个Promise对象,初始状态为绿灯亮。然后,通过setTimeout函数来模拟灯的状态改变。 首先,创建一个Promise对象,将初始状态设置为绿灯亮,并返回Promise实例: ```javascript const trafficLight = new Promise((resolve, reject) => { resolve('绿灯亮'); }); ``` 接下来,可以通过.then方法来监听Promise的状态变化,并根据不同的状态执行相应的操作。在.then方法中,可以使用setTimeout来模拟灯的状态改变,并通过resolve方法来改变Promise的状态: ```javascript trafficLight.then((status) => { console.log(status); // 初始状态为绿灯亮 return new Promise((resolve, reject) => { setTimeout(() => { resolve('黄灯亮'); }, 2000); }); }).then((status) => { console.log(status); // 等待2秒后,黄灯亮 return new Promise((resolve, reject) => { setTimeout(() => { resolve('红灯亮'); }, 1000); }); }).then((status) => { console.log(status); // 等待1秒后,红灯亮 }); ``` 上述代码中,通过链式调用.then方法,实现了红绿灯的状态转换。在每个.then方法中,使用setTimeout来模拟状态改变,并通过resolve方法将状态改变传递给Promise对象。这样,我们就可以在每个.then方法中监听到状态的变化并执行相应的操作。 通过上述代码,可以实现红绿灯的状态转换,并在控制台输出每个状态的变化。 ### 回答3: 红绿灯是交通中常见的信号灯,用于指示车辆和行人何时可以通行。为了实现红绿灯的功能,可以使用promise来进行控制。 首先,我们可以创建一个promise对象来表示红绿灯的状态。在promise对象中,我们可以设定两种状态:红灯和绿灯。 当红灯亮时,表示车辆和行人需要停下等待。这时,我们可以返回一个promise对象,并在其中使用setTimeout函数模拟红灯的等待时间。在红灯等待时间结束后,我们可以将promise状态改为resolve,表示红灯变为绿灯。 当绿灯亮时,表示车辆和行人可以通行。为了模拟绿灯的持续时间,我们同样可以返回一个promise对象,并在其中使用setTimeout函数来延迟绿灯的等待时间。在绿灯等待时间结束后,我们同样将promise状态改为resolve,表示绿灯变为红灯。 通过这样的promise设置,我们可以实现红绿灯的循环变换。在每次红灯和绿灯的状态变化时,我们可以对promise进行相应的处理,例如调用.then()方法来执行后续操作。 总结起来,使用promise可以帮助我们实现红绿灯的控制。通过设置promise对象的状态变化,我们可以模拟红灯和绿灯的持续时间,从而实现红绿灯的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值