既然有了promise 爲何還要有async await ? 固然是promise 也不是完美的異步解決方案,而 async await 的寫法看起來更加簡單且容易理解。promise
async function test() { return "SpongeBob"; } const result = test(); console.log(result);// 獲得Promise { 'SpongeBob' } // 居然返回一個Promise 對象
因此,async 函數返回的是一個 Promise 對象。async 函數會返回一個 Promise 對象,若是在函數中 return
一個直接量,async 會把這個直接量經過 Promise.resolve()
封裝成 Promise 對象。異步
async 函數返回的是一個 Promise 對象,因此在最外層不能用 await 獲取其返回值的狀況下,可用.then()
鏈來處理這個 Promise 對象async
test().then(v => { console.log(v); // 輸出 SpongeBob
});
await 在等啥函數
async 函數返回一個 Promise 對象,因此 await 能夠用於等待一個 async 函數的返回值——這也能夠說是 await 在等 async 函數,但要清楚,它等的實際是一個返回值。注意到 await 不單單用於等 Promise 對象,它能夠等任意表達式的結果,因此,await 後面實際是能夠接普通函數調用或者直接量的。spa
function get() { return "my"; } async function test() { return Promise.resolve("SpongeBob");
}
async function test() {
const v1 = await get();
const v2 = await test();
console.log(v1, v2);
}
test();
若是它等到的是一個 Promise 對象,await 就忙起來了,它會阻塞後面的代碼,等着 Promise 對象 resolve,而後獲得 resolve 的值,做爲 await 表達式的運算結果。await 表達式會暫停當前 async function 的執行,等待 Promise 處理完成。若 Promise 正常處理(fulfilled),其回調的resolve函數參數做爲 await 表達式的值,繼續執行async function。若 Promise 處理異常(rejected),await 表達式會把 Promise 的異常緣由拋出。另外,若是 await 操做符後的表達式的值不是一個 Promise,則返回該值自己。code