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


