1.用法示例
lilei('yo~~').then(hanmeimei).then(liming)
function lilei(bang){
return new Promise((open)=>{
console.log('李雷起跑')
setTimeout(() => {
console.log('李雷到达终点')
console.log(bang)
open(bang)
}, 5000);
})
}
function hanmeimei(bang){
return new Promise((open)=>{
console.log('韩梅梅起跑')
setTimeout(() => {
console.log('韩梅梅到达终点')
console.log(bang)
open(bang)
}, 5000);
})
}
function liming(bang){
return new Promise((open)=>{
console.log('李明起跑')
setTimeout(() => {
console.log('李明到达终点')
console.log(bang)
console.log('结束')
open(bang)
}, 5000);
})
}
2.ES7写法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
(async function(){
var bang = await lilei('yo~')
bang = await hanmeimei(bang)
await liming(bang)
})()
function lilei(bang){
return new Promise((open)=>{
console.log('李雷起跑')
setTimeout(() => {
console.log('李雷到达终点')
console.log(bang)
open(bang)
}, 5000);
})
}
function hanmeimei(bang){
return new Promise((open)=>{
console.log('韩梅梅起跑')
setTimeout(() => {
console.log('韩梅梅到达终点')
console.log(bang)
open(bang)
}, 5000);
})
}
function liming(bang){
return new Promise((open)=>{
console.log('李明起跑')
setTimeout(() => {
console.log('李明到达终点')
console.log(bang)
console.log('结束')
open(bang)
}, 5000);
})
}
</script>
</body>
</html>
3.实现promise原理
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function MyPromise(task){
console.log('enter MyPromise')
var self = this
self.status = 'pending'
self.data
self.nextTask
function open(data){
if(self.status === 'pending'){
self.status = 'open'
if(typeof self.nextTask === 'function'){
self.nextTask(data)
}
}
}
task(open)
}
MyPromise.prototype.then = function(nextTask){
this.nextTask = nextTask
}
lilei('yo~~').then(hanmeimei)
function lilei(bang){
return new MyPromise((open)=>{
console.log('李雷起跑')
setTimeout(() => {
console.log('李雷到达终点')
console.log(bang)
open(bang)
}, 5000);
})
}
function hanmeimei(bang){
return new MyPromise((open)=>{
console.log('韩梅梅起跑')
setTimeout(() => {
console.log('韩梅梅到达终点')
console.log(bang)
open(bang)
}, 5000);
})
}
function liming(bang){
return new MyPromise((open)=>{
console.log('李明起跑')
setTimeout(() => {
console.log('李明到达终点')
console.log(bang)
console.log('结束')
open(bang)
}, 5000);
})
}
</script>
</body>
</html>