欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
vue使用promise、async、await的一點(diǎn)理解

理解:

Promise返回一個(gè)對象,這個(gè)對象的構造函數里面可以傳入函數,函數的第一個(gè)參數是一個(gè)回調函數,即成功的回調函數。函數的第二個(gè)參數也是回調函數,失敗的回調函數。這個(gè)對象可以.then().catch(),所以可以寫(xiě)成new Promise().then().catch(),也可以寫(xiě)成var a = new Promise(); a.then().catch();

Promise構造函數的參數是一個(gè)函數,函數里面的代碼是異步的,即Promise里面的操作,和Promise()外面的操作時(shí)異步"同時(shí)"進(jìn)行的,

Promise中的函數的第一個(gè)參數是回調函數,resolve用來(lái)觸發(fā)then里面的代碼,第二個(gè)參數是回調函數,reject用來(lái)觸發(fā)catch中的代碼,throw new Error();也可以觸發(fā)catch,

await可以是Promise同步,即不會(huì )立即執行Proimse外面(或者說(shuō)下面)的代碼,而await只能用在async標記的函數中,這樣async函數本身就是異步的,而async函數里面的代碼是同步的

async本身是異步的,可以這樣理解,async函數執行到await的時(shí)候就立即返回,開(kāi)始執行async下面的代碼,與await等待執行的代碼同時(shí)執行

漸進(jìn)理解:

    test:function(){

      new Promise((resolve, reject)=>{

        console.log('promise')

        setTimeout(()=>{

          console.log('time out')

          console.log(reject)

          reject(3455435)

        }, 1000)

      }).then(r=>{

        console.log('promise then')

        console.log(r)

      }).catch(e=>{

        console.log('promise catch')

        console.log(e)

      })

  console.log('new Promise done')

    }, 

    //resolve和reject是兩個(gè)回調函數,調用resolve會(huì )觸發(fā)then,reject會(huì )觸發(fā)catch

    test:function(){

      new Promise((resolve, reject)=>{

        console.log('promise')

        setTimeout(()=>{

          console.log('time out')

          console.log(resolve)

          resolve(3455435)

        }, 1000)

      }).then(r=>{

        console.log('promise then')

        throw new Error('我勒個(gè)去!');//觸發(fā)catch

        console.log(r)

      }).catch(e=>{

        console.log('promise catch')

        console.log(e)

      })

    }, 

    //throw new Error('哈哈哈哈')也會(huì )觸發(fā)catch

    test:function(){

      //做飯

      function cook(){

          console.log('開(kāi)始做飯。');

          var p = new Promise(function(resolve, reject){        //做一些異步操作

              setTimeout(function(){

                  console.log('做飯完畢!');

                  resolve('雞蛋炒飯');

              }, 1000);

          });

          return p;

      }

      //吃飯

      function eat(data){

          console.log('開(kāi)始吃飯:' + data);

          var p = new Promise(function(resolve, reject){        //做一些異步操作

              setTimeout(function(){

                  console.log('吃飯完畢!');

                  resolve('一塊碗和一雙筷子');

              }, 2000);

          });

          return p;

      }

      function wash(data){

          console.log('開(kāi)始洗碗:' + data);

          var p = new Promise(function(resolve, reject){        //做一些異步操作

              setTimeout(function(){

                  console.log('洗碗完畢!');

                  resolve('干凈的碗筷');

              }, 2000);

          });

          return p;

      }

      cook()

      .then(function(data){

          return eat(data);

      })

      .then(function(data){

          return wash(data);

      })

      .then(function(data){

          console.log(data);

      });

      console.log('cook done????')

    }, 

    //new Promise返回到是一個(gè)對象,可以在對象后面加then,then要在resolve后才會(huì )觸發(fā),所以會(huì )順序執行,但是它本身是異步的,所以沒(méi)有.then的代碼會(huì )是會(huì )異步執行

    test:function(){

      //做飯

      function cook(){

          console.log('開(kāi)始做飯。');

          var p = new Promise(function(resolve, reject){        //做一些異步操作

              setTimeout(function(){

                  console.log('做飯失??!');

                  reject('燒焦的米飯');

              }, 1000);

          });

          return p;

      }

      //吃飯

      function eat(data){

          console.log('開(kāi)始吃飯:' + data);

          var p = new Promise(function(resolve, reject){        //做一些異步操作

              setTimeout(function(){

                  console.log('吃飯完畢!');

                  resolve('一塊碗和一雙筷子');

              }, 2000);

          });

          return p;

      }

      cook()

      .then(eat, function(data){

        console.log(data + '沒(méi)法吃!');

      })

      console.log('cooke done ???')

    }, 

    //reject 方法就是把 Promise 的狀態(tài)置為已失?。≧ejected),這時(shí) then 方法執行“失敗”情況的回調(then 方法的第二參數)。

    test:function(){

      async function testAsync(){

        return "hello async"

      }

      var a = testAsync();

      console.log(a)

      a.then((b)=>{

        console.log("a.then")

        console.log(b)

      })

    }, 

    //async返回的是一個(gè)Promise對象,then的第一個(gè)參數就是async函數的返回值

如果var a = await testAsync();返回值就是"hello async",因為await等待的就是Promise的返回,而async返回到就是一個(gè)Promise,然后這個(gè)Promise中直接返回了"hello async"

    test:function(){

      function takeLongTime() {

          return new Promise(resolve => {

              setTimeout(() => resolve("long_time_value"), 1000);

          });

      }

      async function test() {

          console.log('before takeLongTime')

          const v = await takeLongTime();

          console.log(v);

      }

      test();

      console.log('after test')

    }, 

    //await可以阻塞Promise對象,await=async wait,await只能出現在async函數內部

    async request(){

      var url = this.url

      var a = new Promise(resolve=>{

        this.axios.post(url, 

          postData

        ).then(res=>{

          console.log(res.data)

          resolve('請求成功')

        }).catch(error=>{

          console.log(error)

          resolve('請求失敗')

        })

        console.log('new Promise done')

      })

      console.log('before await a')

      var b = await a

      console.log('await a done')

      console.log(b)

    }, 

    //使網(wǎng)絡(luò )請求同步,但是仔細一看,其實(shí)axios.post也有then catch,所以可以有更簡(jiǎn)單的調用

    async request(){

      var url = this.url

      var a = this.axios.post(url, 

          postData, 

          {

            // 單獨配置

            withCredentials: true

          }

        ).then(res=>{

          console.log(res.data)

          return '請求成功'

        }).catch(error=>{

          console.log(error)

          return '請求失敗'

        })

      console.log('before await a')

      var b = await a

      console.log('await a done')

      console.log(b)

    }, 

或者寫(xiě)成request:async function(){}

  mounted:function(){

    console.log('test async')

    this.request()

    console.log('async done')

  }, 

  //async函數使其內部同步,同級調用還是異步,async函數下面的接口會(huì )在async函數中的await執行完之前調用

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
js 宏觀(guān)任務(wù)和微觀(guān)任務(wù)> promise的代碼為什么比setTimeout先執行
異步解決方案----Promise與Await
ES6新特性(5)之Promise/async
手寫(xiě)async await的最簡(jiǎn)實(shí)現(20行搞定)!阿里字節面試必考
異步函數與同步函數
理解 JavaScript 的 async/await
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久