http://www.qingpingshan.com/jb/javascript/180607.html
1 <script> 2 var flag = true 3 var myPromise = new Promise(function(resolve,reject){ 4 if(flag) 5 resolve('ok') 6 else 7 reject('no') 8 }) 9 10 var nextPromise = function(prevValue){ 11 console.log(prevValue) 12 return Promise.resolve({ok:1,v:prevValue}) 13 } 14 15 myPromise 16 .then(nextPromise) 17 .then(function(value){ 18 console.log(value) 19 }) 20 .catch(function(error){ 21 console.error(error) 22 }) 23 24 25 26 </script>
加入箭头函数后:
1 <script> 2 let flag = true 3 const myPromise = new Promise((resolve,reject)=>{ 4 if(flag) 5 resolve('ok') 6 else 7 reject('no') 8 }) 9 10 const nextPromise = prevValue =>{ 11 console.log(prevValue) 12 return Promise.resolve({ok:1,v:prevValue}) 13 } 14 15 myPromise 16 .then(nextPromise) 17 .then(value => 18 console.log(value) 19 ) 20 .catch(error => 21 console.error(error) 22 ) 23 </script>
ES7 async 函数版:
1 <script> 2 3 const myPromise = new Promise((resolve, reject) => { 4 let backValue = true 5 6 //模拟一个异步耗时操作 7 setTimeout(()=>{ 8 if(backValue) 9 resolve({code:'OK',value:1}) 10 else 11 reject(new Error('SOME WORONG HAS HAPPEND!')) 12 },2000) 13 }) 14 15 16 async function nextPromise(prevValue) { 17 console.log(prevValue) 18 return Promise.resolve({ ok: 1, v: prevValue }) 19 } 20 21 async function execute() { 22 try { 23 //注意await 必须在async 函数里面使用 24 let prevValue = await myPromise 25 let nextValue = await nextPromise(prevValue) 26 27 console.log(nextValue) 28 29 } catch (error) { 30 console.log(error) 31 } 32 33 } 34 execute() 35 36 </script>