Promise:同步>异步,Await:异步>同步。

  • 比如:登录微信号后,在访问好友列表的同时不能访问朋友圈,访问朋友圈的动作只能等待访问好友列表的结果才能执行,即同步(顺序执行)。 Promise解决了这个问题,将同步改为异步,可以把多个操作同时执行,之间不需要等待其他的结果才能执行,一定程度的节省了时间。同时,也产生了新的问题:当多个操作异步执行的时候,它们之间由于不是顺序执行,它们之间的逻辑性就会变得很弱,Await解决了逻辑性差的问题,把异步改成同步。比如把两个Promise进行封装。等待两个异步完成后整理结果的过程是同步,之后把封装的结果返回。
  • 小记。 1.对 Login和 Fetch进行”休眠”设置。 2.主线执行。顺序执行 Start,Login,Fetch,End,即同步。 3.辅线执行。Login和 Fetch是辅线,辅线和主线是同时执行,返回的时间由于设置了休眠而不确定。 4. End不需等Login,Fetch返回结果就能执行,即异步。Fetch不需要等待Login返回结果就能执行也是异步。 5. Login(A),Fetch(B)是两个 Promise,休眠时间是随意设置的,如果 Login为3000, Fetch为2000 ,结果为 Start-end,Fetch,Login。

    异步执行时间最短为 A和B之间的最大值。同步执行最短时间为A+B。

  1. const doLogin = () => {
  2. return new Promise((resolve, reject) => {
  3. setTimeout(() => resolve('login'), 2000)
  4. })
  5. }
  6. const doFetch = () => {
  7. return new Promise((resolve, reject) => {
  8. setTimeout(() => resolve('fetch'), 3000)
  9. })
  10. }
  11. console.log(`start ${new Date()}<br>`)
  12. doLogin()
  13. .then((result) => {
  14. console.log(`${result} ${new Date()}<br>`)
  15. })
  16. doFetch()
  17. .then((result) => {
  18. console.log(`${result} ${new Date()}<br>`)
  19. })
  20. console.log(`end ${new Date()}`)
  • 小记。1.首先设置一个休眠函数 Interval,如果现在时间与开始时间的时间差小于 Interval,返回现在时间。 2.主线 Start,Succeed,Following顺序执行,即同步。 3.辅线 Succeed和主线同时执行,但是设置了休眠而返回结果的时间不确定。当辅线执行完毕后,主线会先接收辅线的结果,再同步执行。
  1. function sleep(interval) {
  2. const start = Date.parse(new Date())
  3. let current = Date.parse(new Date())
  4. while(current - start < interval) {
  5. current = Date.parse(new Date())
  6. }
  7. }
  8. const login = new Promise((resolve, reject) => {
  9. sleep(2000)
  10. resolve('Jon')
  11. })
  12. console.log('login start')
  13. login.then((result) => {
  14. console.log('login succeed')
  15. })
  16. console.log('following statement')
  17. sleep(3000)
  • Controller对于 C/S/DB框架是外部接口,实际上写的代码也是对框架进行外部的输入设置。

image.png

image.png