promise與async await

2022-11-24 14:41:30 字數 1077 閱讀 3654

async/await擁有更通用的作用域,使得**有更好的易讀性和可維護性。

promise由於其鏈式呼叫,每一個函式都有自己的作用域,如果在多層鏈式呼叫的層級中,相隔兩層的鏈需要有相互依賴關係,則需要額外的引數傳遞。

場景如下:

假設有 p1 、 p2 、 p3 三個非同步操作函式, 並且返回的結果都是 promise。

若: p2 依賴於 p1 的結果。 p3 依賴於 p2 和 p1 的結果。採用 promise 鏈式的**書寫如下:

p1.then(r1 => promise.all([r1, p2(r1)]))

.then([r1,r2] => p3(r1, r2))

而用 async/await 的寫法則比較明瞭:

let r1 = await p1();

let r2 = await p2(r1);

let r3 = await p3(r1,r2);

再來一個例子:

有4個返回值為promise的非同步操作函式, p1、p2、p3、p4。

若:p3依賴 p2 的結果, p4 依賴 p1、p3 的結果。

採用 async/await 的寫法如下:

let r1 = await p1();

let r2 = await p2();

let r3 = await p3(r2);

let r4 = await p4(r1,r3);

採用promise的寫法如下:

promise.all([p1,p2])

.then([r1,r2] => promise.all([r1, p3(r2)]))

.then([r1,r3] => p4(r1,r3))

let r1 = p1();

let r2 = await p2();

let r3 = await p3(r2);

let r4 = await p4(await r1,r3);

async await與promise

1.async 的返回值一定是一個promise。即使你的函式裡沒有return.測試async的返回值 async function testasync let result testasync console.log result 結果 promise 2.因為有了await的限制,所以這裡的a...

promise 和 async await

promise 的存在 為了解決非同步問題,就是當某個非同步執行完之後執行某件事,什麼是非同步 例 console.log 1 settimeout 1000 console.lig 3 懂非同步的知道列印順序為1,3,2。不知道一定說1,2,3.其實這就是非同步 promise 的三個狀態 ful...

Promise以及async和await的用法

promise是一個非同步載入的方式,處理時使用new promise返回一個物件,該物件可以呼叫then方法,then方法中有兩個引數,第一個引數是載入成功時執行,第二個引數是載入失敗時執行,then方法中可以通過返回promise進行鏈式呼叫。promise的三個狀態 初始化 狀態 pendin...