async的非同步使用es7

2022-05-08 08:48:49 字數 3562 閱讀 9448

關於非同步的問題,一直很受關注,es7中的async...await也是針對非同步問題的。

需求:我想使用promise,和async這兩種方法,在一定時間之後輸出乙個『hellow world』

使用promise:

使用async進行操作

值得說一句的是await後面通常是乙個promise物件

function pre(ms));

};async

function outworld (v,ms)

outworld("hellow world",5000);

另乙個例子進一步理解async....await

function timeout(ms,va) , ms);

//settimeout(reject, ms);

});}

async

function asyncprint(value, ms)

//可以看出async最終也是返回乙個promise,(只能return 了)

asyncprint('

hello world

', 5000).then((data)=>`);});

率先輸出第乙個hello world, 在五秒之後幾乎同時輸出其他的結果,【希望你能明白這句話的意義】

假如我有兩個函式,a,b 還有乙個c函式,c函式的執行必須依賴於a,b,,這就要求先執行a(),b(),你該怎麼辦???

聰明的孩子說,那就按順序執行呀,,,a();b(),c();

如果所有的情況都是這麼簡單,我在這裡瞎掰什麼玩意???

一種情況:假如我的a();b()函式的執行是十分緩慢呢????例如你在使用echars的時候會遇到,,可能a,b還沒執行完,程式就執行完了c();然後抱一堆的錯,讓人看著就煩............

現在有了prmoise,async,一切就是那麼美麗了。。。。。。

準備好了,一大波知識點來襲

1)await:後面只能是乙個promise物件,即使不是,它會自動使用promise.resolve(".....")進行轉換成乙個promise物件。。。

demo01

async

function f()

f().then(v=>console.log(v));

demo02 

async

function f2()

var v=f2();

console.log(v);

f2().then(data=>console.log(data))

2)乙個async中可能會有多個await,,,,(只要乙個await語句後面的 promise 變為reject,那麼整個async函式都會中斷執行。)

async

function f()

但是我還是想要執行怎麼辦????

async

function f());

return

await promise.resolve("

我要被列印出來,前面的錯不是我的錯")

3)async中的多個await是按順序執行,只有前面的awit執行完之後,才執行下個await,當然在沒有reject的情況下

l例如:

function n1(),

5000

);

});}

function n2(),

1000

);

});

}function n3(),

3000

); });

}async

function nn ()

catch

(e) }

nn().then((n)=>);

他會在五秒之後輸出n1,六秒之後輸出n2,九秒之後輸出n3,和結果3

很明顯這幾個await並沒有相互依賴,這樣的執行方式是很浪費的,現在想讓他們同時執行

在解決問題之前,先說說我當時做這個demo的時候遇到的幾個問題:

我忘記在每個promise中使用resolve(1);結果她就不能執行了,【希望你明白我在說什麼】

我的意思是每個promise最好給他乙個狀態

好了砸門解決問題辦吧

使用promise.all()方法

function n1(),

5000

);

});}

function n2(),

1000

);

});

}function n3(),

3000

); });

}async

function nn ()

catch

(e) }

nn().then((n)=>);

3)await命令只能用在async函式之中,如果用在普通函式,就會報錯。

async

function dbfuc(db) , {}, {}];

//報錯docs.foreach(function (doc) );

}

正確做法:

async

function dbfuc(db) , {}, {}];

for(let doc of docs)

}繼發執行。正確的寫法是採用for迴圈。

如果確實希望多個請求併發執行,可以使用promise.all方法配合陣列的api  map()

async

function dbfuc(db) , {}, {}];

let promises = docs.map((doc) =>db.post(doc));

let results = await

promise.all(promises);

console.log(results);

}

async遠不止與此,這裡我只將我學到的,

ES7中的非同步async和非同步等待await

非同步async和非同步等待await是什麼?非同步async做為乙個程式猿大家一般都接觸過,知道是什麼意思。而在這裡async主要是用於申請乙個function函式是非同步的!非同步等待await是 async wait 的簡寫,await 只能出現在 async 函式中,一定要注意不能直接呼叫。...

Async函式 詳解 ES7

promise的async await async await是es7推出的一套關於非同步的終極解決方案,為什麼要說他是終極解決方案呢?因為他實在是太好用了,而且寫起來還非常的簡單。什麼是async await呢?可以總結為一句話 async await是一對好 缺一不可,他們的出生是為promis...

ES7 裝飾器使用示例

es7 裝飾器使用示例 示例 ts 裝飾器 類裝飾器 function aclass target any void 類裝飾器 帶引數 function bclass name string function 類裝飾器 function cclass target any any 屬性裝飾器 fun...