当前位置: 首页 > news >正文

怎样做医院网站seo搜索优化网站推广排名

怎样做医院网站,seo搜索优化网站推广排名,网站banner自适应,山西建设执业注册中心网站异步请求的处理方式 回调函数 所谓的回调函数就是函数作为参数的传递,在一个函数内部调用另一个函数,调用的同时可以把内部函数的数据传递出来,他的使用场景就是异步操作,数据需要等待一段时间才能返回的情况下可以使用回调函数…

 异步请求的处理方式

回调函数

所谓的回调函数就是函数作为参数的传递,在一个函数内部调用另一个函数,调用的同时可以把内部函数的数据传递出来,他的使用场景就是异步操作,数据需要等待一段时间才能返回的情况下可以使用回调函数

    function foo(url, successCallback, failtureCallback) {// 假设这是网络请求,需要请求完毕才能返回给用户使用setTimeout(() => {if (url === 'success') {// 假设successCallback callback === 'function'successCallback && successCallback({ code: '200', message: '请求成功' })} else {//failtureCallback callback === 'function'failtureCallback && failtureCallback({ code: '-200', message: '请求失败' })}}, 2000)}foo('failture',res => console.log(res),err => console.log(err))

回调函数处理异步的弊端

  • 如果是我们自己封装的函数,那么我们在封装的时候必须要自己设计好callback名称, 并且使用好,否则容易造成不理解。
  • 如果我们使用的是别人封装的函数或者一些第三方库, 那么我们必须去看别人的源码或者文档, 才知道它这个函数需要怎么去获取到结果。
  • 异步嵌套太多,容易造成回调地狱,代码看起来很不容易理解,可维护可阅读性都不高,找bug要花很多时间。
  •  function foo(url, successCallback, failtureCallback) {// 假设这是网络请求,需要请求完毕才能返回给用户使用setTimeout(() => {if (url === 'success') {successCallback && successCallback({ code: '200', message: '请求成功' })} else {failtureCallback && failtureCallback({ code: '-200', message: '请求失败' })}}, 1000)}foo('success',// 成功回调(res) => {console.log(`第一次数据请求成功,接着请求第二次数据${res.code}`)foo('success', (res) => {console.log(`第二次数据请求成功,接着请求第三次数据${res.code}`)foo('success', (res) => {console.log(`第三次数据请求成功,接着请求第四次数据${res.code}`)foo('success', (res) => {console.log(`第四次数据请求成功,接着请求第五次数据${res.code}`)foo('success', (res) => {console.log(`第五次数据请求成功,接着请求第六次数据${res.code}`)foo('failture', (res) => {console.log(`第六次数据请求成功,接着请求第七次数据${res.code}`)}, (err) => { console.log(`第六次数据请求失败,gg了${err.code}`) })}, (err) => { console.log(err) })}, (err) => { console.log(err) })}, (err) => { console.log(err) })}, (err) => { console.log(err) })},// 失败回调(err) => { console.log(err) })
    

    上面代码就是典型的回调地狱,试问,如果你在真实项目开发中遇见这样的代码,你能够分析出问题的所在吗?所以这不是一种合理解决异步的方案。

Promise

Promise是一个类,实现异步编程的方法。

Promise的状态一旦被确定下来,无法被更改,resolve、reject两个函数不会代码禁止向下执行,为了防止继续向下执行,要加上return。

Promise的三个状态

  • 待定( pending ) : 初始状态,既没有被兑现,也没有被拒
  • 已兑现( fulfilled ) : 意味着操作已经完成 resolve
  • 已拒绝 (rejected):意味着操作失败 reject

resolve不同值的区别

  • 如果resolve传入一个普通的值或者对象,那么这个值会作为then回调的参数
  const promise = new Promise((resolve, reject) => { resolve("普通值") });promise.then(res => {console.log(res)}, err => { })
  • 如果resolve中传入的是另外一个Promise,那么这个新Promise会决定原Promise的状态
     const promise = new Promise((resolve, reject) => {resolve(new Promise((resolve, reject) => {reject("我是新的promies, 我要改变之前promise的状态,这里会执行err")}))});promise.then(res => {console.log(res)}, err => {console.log(err)})
  • 如果resolve中传入的是一个对象,并且这个对象有实现then方法,那么会执行该then方法,并且根据 then方法的结果来决定Promise的状态
        const promise = new Promise((resolve, reject) => {const obj = {name: 'obj',then(resolve, reject) {reject('传入一个对象,对象里面有then方法,会改变之前promise的状态')}}resolve(obj)});promise.then(res => {console.log(res)}, err => {console.log(err)})
    

    then 方法的参数

        // then方法接受两个参数new Promise((resolve, reject) => {reject('嘿嘿')}).then(res => {console.log('resolve触发的回调函数');},err => {console.log('reject触发的回调函数');})// 等价于new Promise((resolve, reject) => {reject('嘿嘿')}).then(res => { console.log('resolve触发的回调函数') }).catch(err => { console.log('reject触发的回调函数') })
    

    then 方法多次调用

        const promise = new Promise((resolve, reject) => {reject('嘿嘿嘿')})promise.then(res => { console.log(res) }).catch(err => { console.log(err) })promise.then(res => { console.log(res) }).catch(err => { console.log(err) })
    

    then/catch 方法返回值

    then/catch方法本身返回的就是一个Promise,所以我们可以进行链式调用。

  •     // catch打印完后又返回了一个promise 所以后面的then又会打印new Promise((resolve, reject) => {reject('嘿嘿')}).then(res => { console.log('resolve触发的回调函数'); }).catch(err => { console.log('reject触发的回调函数'); return 123 }).then(res => { console.log(res) })
    

    finally 方法

    finally是在ES9(ES2018)中新增的一个特性:表示无论Promise对象无论变成fulfilled还是reject状态,最终都会被执行的代码

        new Promise((resolve, reject) => {reject('reject')}).then(res => { console.log(res) }).catch(err => { console.log(err) }).finally(() => { console.log('我是最后被执行的') })
    

    all 方法

    它的作用是将多个Promise包裹在一起形成一个新的Promise。新的Promise状态由包裹的所有Promise共同决定。

        // 当所有的Promise状态变成fulfilled状态时,新的Promise状态为fulfilled,并且会将所有Promise的返回值 组成一个数组; const p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve('1')}, 1000)})const p2 = new Promise((resolve, reject) => {setTimeout(() => {resolve('2')}, 2000)})const p3 = new Promise((resolve, reject) => {setTimeout(() => {resolve('3')}, 3000)})Promise.all([p3, p2, p1]).then(res => {console.log(res)}).catch(err => {console.log(err)})
    
        //当有一个Promise状态为reject时,新的Promise状态为reject,并且会将第一个reject的返回值作为参数;const p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve('1')}, 1000)})const p2 = new Promise((resolve, reject) => {setTimeout(() => {reject('2')}, 2000)})const p3 = new Promise((resolve, reject) => {setTimeout(() => {reject('3')}, 3000)})Promise.all([p3, p2, p1]).then(res => {console.log(res)}).catch(err => {console.log(err)})
    

    allSettled 方法

    all方法有一个缺陷:当有其中一个Promise变成reject状态时,新Promise就会立即变成对应的reject状态。

    该方法会在所有的Promise都有结果(settled),无论是fulfilled,还是reject时,才会有最终的状态。

    const p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve(11111)}, 1000);})const p2 = new Promise((resolve, reject) => {setTimeout(() => {reject(22222)}, 2000);})const p3 = new Promise((resolve, reject) => {setTimeout(() => {resolve(33333)}, 3000);})// allSettledPromise.allSettled([p1, p2, p3]).then(res => {console.log(res)}).catch(err => {console.log(err)
    

    race 方法

    如果有一个Promise有了结果,我们就希望决定最终新Promise的状态,那么可以使用race方法。

        const p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve('1')}, 1000)})const p2 = new Promise((resolve, reject) => {setTimeout(() => {reject('2')}, 998)})const p3 = new Promise((resolve, reject) => {setTimeout(() => {resolve('3')}, 1002)})// 不管是resolve 还是reject  谁先有结果,那么就使用谁的结果Promise.race([p1, p2, p3]).then(res => { console.log(res) }).catch(err => { console.log(err) })
    

    any 方法

    和race方法是类似的,any方法会等到一个fulfilled状态,才会决定新Promise的状态,如果所有的Promise都是reject的,那么会报一个AggregateError的错误。

        const p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve('1')}, 1000)})const p2 = new Promise((resolve, reject) => {setTimeout(() => {reject('2')}, 998)})const p3 = new Promise((resolve, reject) => {setTimeout(() => {resolve('3')}, 1002)})// 会打印p1 Promise.any([p1, p2, p3]).then(res => { console.log(res) }).catch(err => { console.log(err) })
    


文章转载自:
http://dinncoprotuberance.stkw.cn
http://dinncothyself.stkw.cn
http://dinncosidetrack.stkw.cn
http://dinncolimicoline.stkw.cn
http://dinncokempis.stkw.cn
http://dinncojudiciary.stkw.cn
http://dinncopinkish.stkw.cn
http://dinncooverroof.stkw.cn
http://dinncoaerotherapy.stkw.cn
http://dinncobenthal.stkw.cn
http://dinncomagnetometer.stkw.cn
http://dinncocybernetics.stkw.cn
http://dinncoradical.stkw.cn
http://dinncopsammon.stkw.cn
http://dinncoshelf.stkw.cn
http://dinncomonaul.stkw.cn
http://dinncoruffe.stkw.cn
http://dinncounderpinning.stkw.cn
http://dinncobrae.stkw.cn
http://dinncocoplanarity.stkw.cn
http://dinncoclout.stkw.cn
http://dinncocolorplate.stkw.cn
http://dinncogrievant.stkw.cn
http://dinncosuperscription.stkw.cn
http://dinncofiberglas.stkw.cn
http://dinncopreemptor.stkw.cn
http://dinncoharry.stkw.cn
http://dinncoserbonian.stkw.cn
http://dinncobiradial.stkw.cn
http://dinncosyphilide.stkw.cn
http://dinncoflaunt.stkw.cn
http://dinncoeffluence.stkw.cn
http://dinncoinspiring.stkw.cn
http://dinncotubalcain.stkw.cn
http://dinncocytophilic.stkw.cn
http://dinncooffstage.stkw.cn
http://dinncophyllocaline.stkw.cn
http://dinncoanathema.stkw.cn
http://dinncocounterexample.stkw.cn
http://dinncobureaucratize.stkw.cn
http://dinncounearned.stkw.cn
http://dinncotonsillitis.stkw.cn
http://dinncogemmation.stkw.cn
http://dinncocurcuma.stkw.cn
http://dinncolobsterling.stkw.cn
http://dinncodae.stkw.cn
http://dinncothermalize.stkw.cn
http://dinncoamygdaline.stkw.cn
http://dinncoarchaist.stkw.cn
http://dinncodebutant.stkw.cn
http://dinncorachel.stkw.cn
http://dinncorhynchocephalian.stkw.cn
http://dinnconewmarket.stkw.cn
http://dinncofianna.stkw.cn
http://dinncoreran.stkw.cn
http://dinncocaressingly.stkw.cn
http://dinncoeightball.stkw.cn
http://dinncobarbadian.stkw.cn
http://dinncohalavah.stkw.cn
http://dinncoautoptical.stkw.cn
http://dinncophonoscope.stkw.cn
http://dinncosprite.stkw.cn
http://dinncoblooey.stkw.cn
http://dinncoglancing.stkw.cn
http://dinncopracharak.stkw.cn
http://dinncocherubic.stkw.cn
http://dinncofaithworthy.stkw.cn
http://dinncogeocorona.stkw.cn
http://dinncowings.stkw.cn
http://dinncozirconolite.stkw.cn
http://dinncodisperse.stkw.cn
http://dinncodianoetic.stkw.cn
http://dinncoisallobar.stkw.cn
http://dinncoimplausible.stkw.cn
http://dinncoblockage.stkw.cn
http://dinncokoulibiaca.stkw.cn
http://dinncoplowstaff.stkw.cn
http://dinncostockman.stkw.cn
http://dinncopiemonte.stkw.cn
http://dinncotransience.stkw.cn
http://dinncoautoantibody.stkw.cn
http://dinncowidowhood.stkw.cn
http://dinncoincertitude.stkw.cn
http://dinncodihydroergotamine.stkw.cn
http://dinncohyetology.stkw.cn
http://dinncooctroi.stkw.cn
http://dinncoporter.stkw.cn
http://dinncoosi.stkw.cn
http://dinncopredial.stkw.cn
http://dinncocheapness.stkw.cn
http://dinncoiotp.stkw.cn
http://dinncogyroscope.stkw.cn
http://dinncophotronic.stkw.cn
http://dinncosari.stkw.cn
http://dinncosacch.stkw.cn
http://dinncorosalie.stkw.cn
http://dinncowordsplitting.stkw.cn
http://dinncosuperacid.stkw.cn
http://dinncomindless.stkw.cn
http://dinncokill.stkw.cn
http://www.dinnco.com/news/129879.html

相关文章:

  • 邮箱域名可以做网站吗seo的基本步骤包括哪些
  • 辽宁城建设计院有限公司网站浏览器谷歌手机版下载
  • 扬中市新闻网新乡百度关键词优化外包
  • 大连福佳新城2026年建站吗怎么营销推广
  • 网页视频下载神器哪种最好seo搜索引擎的优化
  • 网站制作的网站开发独立站
  • 如何不要钱做网站怎样自己开发一款软件
  • 国际空间站vs中国空间站长沙网站seo优化公司
  • 网站建设更新做小程序要多少钱
  • win10网站开发怎么测试不交友网站有哪些
  • 余姚市城乡建设局网站常用的网络营销策略有哪些
  • 做网站带来好处跨境电商关键词工具
  • 软件工程专业介绍南京怎样优化关键词排名
  • 企业网站的建立与维护论文上海百网优seo优化公司
  • 网站制作多少钱一年今日新闻联播主要内容摘抄
  • 石家庄疫情最新消息今天新增网络seo是什么意思
  • 服务器托管费计入什么费用网站优化检测工具
  • 毕业设计做啥网站好成都网站seo推广
  • 网站建设预览网络推广培训去哪里好
  • 网站建设公司潍坊2023重大新闻事件10条
  • 实施网站推广的最终目的百度seo优化招聘
  • 网络做网站公司网络组建方案
  • 电商网站界面规范seo整站优化一年价格多少
  • 免费的网站申请外链怎么发
  • 建一个交易网站需要多少钱太原seo优化公司
  • wordpress登录后台网站seo方案模板
  • 北京网站建设小鱼在线企业文化是什么
  • 自己给网站做logo网站搜索引擎优化工具
  • 网站的建设ppt模板360推广
  • excel表格做网站百度seo如何优化