在異步編程中,es6供應了promise對象的體式格局。
簡樸的用法
var promise = new Promise((resolve,reject)=>{
if(){
resolve(res)
}else{
reject(res)
}
})
promise.the((res)=>{}).catch((res)=>{})
而async 實則是返回了一個promise對象
async function test(){
console.log("123");
}
var restult = test();
console.log(result);//=>>Promise{"123"};
//假如函數return 一個直接量,那末就即是直接去挪用Promise.resolve()要領
//Promise.resolve要領也就是天生一個Promise實例,而且其直接挪用resolve。
//比方
Promise.resolve('test');
//等同於
new Promise((resolve,reject)=>resolve('test'));
//所以async能夠明白為天生一個promise實例。
//那末天然也能夠去挪用.then()
test.then((res)=>{})
await則是合營async運用的。await即是是守候一個返回值,守候async的實行效果。
async function testAsync() {
return Promise.resolve("hello async");
}
async function test() {
const res = await testAsync();
console.log(res);
}
test();
輸出效果就是’hello async’.
await必需合營async運用,然則await的對象能夠不是Promise對象,一個平常的函數也能夠運用。
假如它比及的不是一個 Promise 對象,那 await 表達式的運算效果就是它比及的東西。
假如它比及的是一個 Promise 對象,await 就忙起來了,它會壅塞背面的代碼,等着 Promise 對象 resolve,然後獲得 resolve 的值,作為 await 表達式的運算效果。然則async函數不會形成壅塞,所以await合營async運用,則沒有影響到外部。
async和await的作用
能夠把promise 的then寫得簡約,便於明白
流程就是天生一個async函數,然後函數內部去await一個promise對象得運轉效果,再用這個效果去挪用別的得Promise對象,云云得話then((res)=>{}).then((ress)=>{})。就能夠寫成
var res = await foo();
var ress = await fob(res);
var resss = await foc(ress)
在then鏈龐雜得情況下,promise得參數通報異常龐雜,但運用async+await得體式格局,就犹如同步編程平常,異常清楚和流通。