1. 程式人生 > 其它 >NNU_從零開始瞭解一個WebGIS(Js)

NNU_從零開始瞭解一個WebGIS(Js)

1.同步與非同步

在 Es5 期間,由於非同步呼叫完成的先後順序無法確定,會導致非同步“回撥地獄”的問題。

Es6 新增 promise,Es7 新增 async/await。即為解決回撥問題。

1.1 promise async await 是用來幹什麼的?

簡單的說,promise 就是限制非同步執行的函式的執行順序,即:讓多個非同步函式可以在主執行緒中按順序從上往下執行。

async-await是promise和generator的語法糖。只是為了讓我們書寫程式碼時更加流暢,當然也增強了程式碼的可讀性。簡單來說:async-await 是建立在 promise機制之上的,並不能取代其地位。let one = () => 1

function two(){
   return new Promise((resolve,reject) =>{  //new一個promise物件,物件裡面的引數是一個 function,裡面有兩個變數,一個 resolve (成功時執行),reject(拒絕時執行)
       setTimeout(() => {   //這裡用一個延時器來模擬請求反應的時間滯後
          resolve(2)
        }, 3000);
      })
}
let three = (a,b) => a+b;

 async function run(){   //async告訴run要順序一個個執行
console.log(one()); console.log(await two()); //await是傳送請求時讓two執行成功後才能繼續進行,如果請求失敗那麼下面的three也不會執行 console.log(three(1,2));  //也因此,await必須出現在async函式的內部,無法單獨使用
}                  //await 後面可以跟任何的JS 表示式。雖然說 await 可以等很多型別的東西, 但是它最主要的意圖是用來等待 Promise 物件的狀態被 resolved。
                  //如果 await 的是 promise 物件會造成非同步函式(此處為async function run())停止執行並且等待 promise 的解決,如果等的是正常的表示式則立即執行。

run()
//expected output:
//1
//2
//3
//若此處沒有 async 與 await 則會輸出
//1
//3
//2