欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript同步與異步任務(wù)問(wèn)題詳解

 更新時(shí)間:2022年07月19日 11:14:27   作者:qiaokelizhuzhu  
這篇文章主要介紹了JavaScript事件循環(huán)同步任務(wù)與異步任務(wù),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下

js會(huì)出現(xiàn)異步問(wèn)題場(chǎng)景

  • 延時(shí)操作
  • 數(shù)據(jù)請(qǐng)求同異步
  • promise 異步
  • 回調(diào)涵數(shù)(最常見(jiàn)多內(nèi)置涵數(shù)支持接收回調(diào)涵數(shù)來(lái)異步代碼 )
  • 事件監(jiān)聽(tīng) 如,click事件等異步
  • 訂閱與發(fā)布

今天遇到的問(wèn)題是,請(qǐng)求數(shù)據(jù)時(shí)間太長(zhǎng),會(huì)先執(zhí)行之后的代碼,

初步預(yù)想的解決方法:

  • 使用箭頭涵數(shù),使用涵數(shù)的返回值,讓請(qǐng)求與之后的代碼 同步執(zhí)行
  • 異步請(qǐng)求修改變成同步
  • async/await-Promise-讓異步操作同步執(zhí)行
  • 開(kāi)關(guān)涵數(shù)
  • 延時(shí)操作

標(biāo)題延時(shí)操作

缺點(diǎn):不知請(qǐng)求數(shù)據(jù)需要多長(zhǎng)時(shí)間,之后的數(shù)據(jù)需要延遲多少時(shí)間展示,是個(gè)問(wèn)題。

      function tes0t() {
        fn1();
        fn2();
        fn3();
      }
      function fn1() {
        console.log(1);
      }
      function fn2() {
        setTimeout(function () {
          console.log(2);
        }, 1000);
      }
      function fn3() {
        setTimeout(function () {
          console.log(3);
        }, 0);
      }
      tes0t();

開(kāi)關(guān)涵數(shù)

預(yù)期輸出是:1,2,3,

實(shí)際輸出是:1,3,2,

所以達(dá)不到想要的效果

var kai=false
      function tes0t() {
        fn1();
        fn2();
        fn3();
      }
      function fn1() {
        console.log(1);
      }
      function fn2() {
        setTimeout(function () {
          console.log(2);
          kai= true;
        }, 1000);
        //   console.log();
      }
      function fn3() {
        setTimeout(function () {
          console.log(3);
        }, 0);
      }
      tes0t();

jQuery異步請(qǐng)求設(shè)置為同步請(qǐng)求

是否達(dá)到預(yù)期效果,不知道

$.ajaxSettings.async = false;//同步請(qǐng)求
 Global_MBPage.$gt(url, params, function (json) {}
 $.ajaxSettings.async = true;//異步請(qǐng)求 - 默認(rèn)是異步

使用箭頭涵數(shù),涵數(shù)的返回值,讓請(qǐng)求與之后的代碼 同步執(zhí)行

測(cè)試是可以達(dá)到預(yù)期效果,輸出結(jié)果是1,2,3

      function tes0t() {
        fn1();
        fn2(1, 1, () => {fn3();});
      }
      function fn1() {
        console.log(1);
      }
      function fn2(n1, n2, n3) {
        setTimeout(function () {
          console.log(2);
          if (n3) n3.call();//返回值的設(shè)置
        }, 1000);
      }
      function fn3() {
        setTimeout(function () {
          console.log(3);
        }, 0);
      }
      tes0t();

async/await-Promise-讓異步操作同步執(zhí)行

function fn4(){
  return new Promise(resolve=>{
    setTimeout(function(){
      msg='等啥 '
      resolve(msg)
    },1000)
  })
}
async function aC(){
  var result = await fn4();
  console.log(result);
}
aC() 

// 輸出為‘ 等啥 ’

到此這篇關(guān)于JavaScript同步與異步任務(wù)問(wèn)題詳解的文章就介紹到這了,更多相關(guān)JavaScript同步與異步 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論