非同步async和非同步等待await是什麼?
非同步async做為乙個程式猿大家一般都接觸過,知道是什麼意思。而在這裡async主要是用於申請乙個function函式是非同步的!
非同步等待await是 async wait 的簡寫,await 只能出現在 async 函式中,一定要注意不能直接呼叫。因為await會造成程式阻塞,浪費資源!
比方說我們要吃外賣,而外賣在樓下,同步進行的話,是我們先下去拿回外賣,再吃上外賣!而我們現在非同步進行,要想吃上外賣,要找乙個人下去拿外賣,而我們這一時間,只能在這等外賣拿回來,才能吃上,所以就要用await非同步等待,而在下去拿這個過程中,我們做其他的事是不影響的,所以是非同步進行的。下面上**:
先看一下async非同步的函式返回的是什麼?
上圖是我們輸出的值,從圖中我們可以知道,async是用promise構造出來的!返回的是乙個promise表示式!這樣我們就可以用.then來輸出一下結果試一下!
async function waimai()
waimai().then(function(result));
果然是可以用.then輸出的,不過這樣寫的話就太麻煩了,比直接用promise簡單不了多少!
下面我們看一下await非同步等待是怎麼用的,前面說過了await必須要在非同步函式裡面進行,所以await必須放在async function裡面!
從輸出的結果我們可以看出waimai這個函式,在等待完以後,把值賦給了result 然後再輸出的!也是可以輸出的,比用.then方便了很多!
以上就是async和await的用法,說的可能還是比較粗糙,大家可能不太明白!
下面我再給大家舉乙個案例,和promise對比使用,這樣能突出這個方法要比promise好很多!
promise的**:
/**
* 傳入引數 n,表示這個函式執行的時間(毫秒)
* 執行的結果是 n + 200,這個值將用於下一步驟
*/function takelongtime(n) , n);
});}function step1(n) `);
return takelongtime(n);
}function step2(n) `);
return takelongtime(n);
}function step3(n) `);
return takelongtime(n);
}//以上都一樣 下面這裡面promise的**
function doit())
.then(function(time3))
.then(function(result))
}doit();//輸出結果
上圖是輸出的結果是15秒!
async和await的**:
/**
* 傳入引數 n,表示這個函式執行的時間(毫秒)
* 執行的結果是 n + 200,這個值將用於下一步驟
*/function takelongtime(n) , n);
});}function step1(n) `);
return takelongtime(n);
}function step2(n) `);
return takelongtime(n);
}function step3(n) `);
return takelongtime(n);
}//以上都一樣 下面這裡面async的**
async function doit()
doit();//輸出結果
結果是一樣的都是15秒,中間可能程式執行會有點誤差
而async的**相比promise精簡了好多,而且通俗易懂,三行就搞定了!!
async的非同步使用es7
關於非同步的問題,一直很受關注,es7中的async.await也是針對非同步問題的。需求 我想使用promise,和async這兩種方法,在一定時間之後輸出乙個 hellow world 使用promise 使用async進行操作 值得說一句的是await後面通常是乙個promise物件 func...
Async函式 詳解 ES7
promise的async await async await是es7推出的一套關於非同步的終極解決方案,為什麼要說他是終極解決方案呢?因為他實在是太好用了,而且寫起來還非常的簡單。什麼是async await呢?可以總結為一句話 async await是一對好 缺一不可,他們的出生是為promis...
Async和Await 非同步方法
async和await關鍵字是c 非同步程式設計的核心。通過使用這兩個關鍵字,你可以使用.net framework或windows runtime的資源建立乙個非同步方法如同你建立乙個同步的方法一樣容易。通過使用async和await定義的非同步方法,這裡被稱為非同步方法。非同步方法的特點 方法中...