JavaScript 回调函数/Promise/ async/await

2022-12-30 0 640

mammalian和博戈达

博戈达和mammalian是三个基本概念,难混为一谈原因在于博戈达和mammalian在英语原意上相似,只不过在英语中,这是全然不全然相同的小东西,博戈达(parallelism)、mammalian(concurrency)。

博戈达(parallelism):是宏观经济基本概念,假定CPU有三个核心理念,则他们就能与此同时顺利完成各项任务A和各项任务B,与此同时顺利完成数个各项任务的情形就能称作博戈达。

mammalian(concurrency):是宏观经济基本概念,那时有各项任务A和各项任务B,在一两年内,透过各项任务间的转换顺利完成这三个各项任务,此种情形称作mammalian。

反弹表达式

反弹表达式广为存有于他们所撰写的JavaScript标识符中,它整体表那时该事件存取,Ajax允诺或是其它的情形下,两个反弹表达式可整体表现成如下表右图方式

ajax(url,() => { console.log(这儿是反弹表达式); })

反弹冥界:反弹表达式较好的化解了这类触发器情形,但过分误用反弹表达式会导致反弹冥界,即反弹表达式太长,冗余过深。太长或是冗余过深的回调表达式,会让反弹表达式存有强谐振亲密关系,除非有两个表达式略有更动,所以可能将会如前所述。两个反弹冥界可能将如下表右图右图:

ajax(firstUrl, () => { console.log(这儿是首度反弹表达式); ajax(secondUrl,() => { console.log(这儿是第三次反弹表达式); ajax(threeUrl, () => { console.log(这儿是第三次反弹表达式); //todo更多 }) }) })

Generator

在ES6之前,两个表达式除非执行将不会被中断,一直到表达式执行完毕,在ES6之后,由于Generator的存有,表达式能暂停自身,待到合适的机会再次执行。用Generator能化解反弹冥界。

function *fetch() { yield ajax(url, () => {console.log(这儿是首度反弹表达式);}); yieldajax(url,() => {console.log(这儿是第三次反弹表达式);}); yield ajax(url, () => {console.log(这儿是第三次反弹表达式);}); } varit = fetch();var result1 = it.next(); var result2 = it.next(); var result3 = it.next();

Promise

Promise翻译过来就是承诺的原意,Promise一共有三种状态:pending(等待中)resolve(顺利完成)reject(拒绝),这个承诺意味着在将来一定会有两个表决,并且只能表决一次,表决的状态一定是resolve(顺利完成)或是reject(拒绝),两个Promise可能将会是如下表右图的方式:

// 普通的Promise function foo() { return new Promise((resolve,reject) => { // 第一次表决有效,其后无论是resolve()还是reject()都无效 resolve(true); resolve(false); }) } // Promise化解反弹冥界ajax(url).then(res => { console.log(这儿是首度反弹表达式); }).then(res => { console.log(这儿是第三次反弹表达式); }).then(res => { console.log(这儿是第三次反弹表达式); })

async/await

如果两个方法前面加上了async,所以这个方法就会返回两个Promiseasync就是将表达式用Promise.resolve()包裹了下,并且await只能配合async使用,不能单独出现。两个async/await可能将会是如下表右图的方式:

// 普通的async/await async function foo() { letnumber =await 3; // await自动用promise.resolve()包装 console.log(number); } foo(); // async/await化解反弹地狱 async function fetch() { var result1 = await ajax(url1); var result2 = await ajax(url2); var result3 = awaitajax(url3); } fetch();

如若转载,请注明出处:开源字节

https://sourcebyte.cn/article/170.html

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务