1. 程式人生 > >拒絕回調,擁抱async await

拒絕回調,擁抱async await

reject ons 第一次 ios resolv 直觀 ise 依賴 ror

  之前使用jquery中ajax,請求的結果需要寫在回調函數裏面,後面接觸到了axios/fetch,使用了es6中Promise進行封裝,這種鏈式結構調用,看起來比之前直觀,可是還是沒有解決需要把結果寫在回調函數裏面,甚至axios/fetch相比原生ajax以及jquery中的ajax來說,不支持同步請求,這就導致:當一個請求需要的參數是依賴上一次請求返回的結果時,只能把第二次請求也寫在第一次請求的回調裏面,當內容過多時,就會被嵌套繞進去,寫法上很不優雅。

  es7中的async await正是解決這一尷尬問題的方法,配合try catch,代碼簡潔而優雅,跟回調說拜拜。

  首先,如果是 jquery的項目:

    1.使用Promise封裝ajax

      let ApiHost = ‘http://10.0.0.0:3000‘

      function DoRequest(url, data=null, type=‘get‘) {

        return new Promise((resolve, reject) => {

          $.ajax({

            type: type,

            url: `${ApiHost }${url}?_rank=${new Date*1}`,

            data: Object.assign({}, data),

            crossDomain: true,

            dataType: ‘json‘,

            success: (res) => {

              resolve(res)

            },

            error: (xhr, textStatus, errorThrown) => {

              reject(xhr, textStatus, errorThrown)

            }

          })

        })

      }

    2.調用

      DoRequest(url, { id: 1 }).then(res => {

        console.log(res)

      }).catch(err => {

        console.log(err)

      })

    3.使用async await改寫

      async function getList() {

        try {

          let data = await DoRequest(url, { id: 1 })

          console.log(data)

        } catch(err) {

          console.log(err)

        }

      }

拒絕回調,擁抱async await