Skip to content

Instantly share code, notes, and snippets.

@mutongwu
Created July 16, 2019 15:11
Show Gist options
  • Save mutongwu/e1c2e6d5c275e509949afea2f0a93e17 to your computer and use it in GitHub Desktop.
Save mutongwu/e1c2e6d5c275e509949afea2f0a93e17 to your computer and use it in GitHub Desktop.
function LazyMan(name){
	console.log('This is ' + name, new Date());
	var prePromise = Promise.resolve();
	var pending = [Promise.resolve()];
	var firstSleep  = Promise.resolve();

	return {
		eat(food) {
			// setTimeout(function(wait){
			// 	Promise.all([wait, firstSleep]).then(function(){
			// 		console.log('Eat:' + food, new Date());	
			// 	});	
			// }, 0, this.getPending())
			var wait = this.getPending();
			Promise.resolve().then(function(){
				Promise.all([wait, firstSleep]).then(function(){
					console.log('Eat:' + food, new Date());	
				});	
			})
			return this;
		},
		sleepFirst(sec){
			var newFirstSleep =  new Promise(function(resolve){
				firstSleep.then(function(){
					setTimeout(function(){
						console.log(' after first sleep  ' + sec + ' seconds', new Date())
						resolve()
					}, sec * 1000);
				})	
			})
			firstSleep = newFirstSleep
			return this;
		},
		sleep(sec){
			var newPromise = new Promise(function(resolve){
				prePromise.then(function(){
					firstSleep.then(function(){
						setTimeout(function(){
							console.log('after sleep  ' + sec + ' seconds', new Date())
							
							resolve();
							pending.splice(1, 1)
						}, sec * 1000); //
					})
				});
			});
			pending.push(newPromise)
			prePromise = newPromise;
			
			return this;
		},
		getPending(){
			return pending[pending.length - 1];
		}
	}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment