關於非同步的問題,一直很受關注,es7中的async...await也是針對非同步問題的。
需求:我想使用promise,和async這兩種方法,在一定時間之後輸出乙個『hellow world』
使用promise:
使用async進行操作
值得說一句的是await後面通常是乙個promise物件
function pre(ms));另乙個例子進一步理解async....await};async
function outworld (v,ms)
outworld("hellow world",5000);
function timeout(ms,va) , ms);率先輸出第乙個hello world, 在五秒之後幾乎同時輸出其他的結果,【希望你能明白這句話的意義】//settimeout(reject, ms);
});}
async
function asyncprint(value, ms)
//可以看出async最終也是返回乙個promise,(只能return 了)
asyncprint('
hello world
', 5000).then((data)=>`);});
假如我有兩個函式,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物件。。。
demo01async
function f()
f().then(v=>console.log(v));
demo022)乙個async中可能會有多個await,,,,(只要乙個await語句後面的 promise 變為reject,那麼整個async函式都會中斷執行。)async
function f2()
var v=f2();
console.log(v);
f2().then(data=>console.log(data))
async但是我還是想要執行怎麼辦????function f()
asyncfunction f());
return
await promise.resolve("
我要被列印出來,前面的錯不是我的錯")
3)async中的多個await是按順序執行,只有前面的awit執行完之後,才執行下個await,當然在沒有reject的情況下
l例如:
function n1(),他會在五秒之後輸出n1,六秒之後輸出n2,九秒之後輸出n3,和結果35000
);
});}
function n2(),
1000
);
});
}function n3(),
3000
); });
}async
function nn ()
catch
(e) }
nn().then((n)=>);
很明顯這幾個await並沒有相互依賴,這樣的執行方式是很浪費的,現在想讓他們同時執行
在解決問題之前,先說說我當時做這個demo的時候遇到的幾個問題:
我忘記在每個promise中使用resolve(1);結果她就不能執行了,【希望你明白我在說什麼】
我的意思是每個promise最好給他乙個狀態
好了砸門解決問題辦吧
使用promise.all()方法
function n1(),3)5000
);
});}
function n2(),
1000
);
});
}function n3(),
3000
); });
}async
function nn ()
catch
(e) }
nn().then((n)=>);
await
命令只能用在async
函式之中,如果用在普通函式,就會報錯。async正確做法:function dbfuc(db) , {}, {}];
//報錯docs.foreach(function (doc) );
}
async如果確實希望多個請求併發執行,可以使用function dbfuc(db) , {}, {}];
for(let doc of docs)
}繼發執行。正確的寫法是採用
for
迴圈。promise.all
方法配合陣列的api map()asyncasync遠不止與此,這裡我只將我學到的,function dbfuc(db) , {}, {}];
let promises = docs.map((doc) =>db.post(doc));
let results = await
promise.all(promises);
console.log(results);
}
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...