国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

獲取JavaScript異步函數的返回值

2019-11-19 18:22:26
字體:
來源:轉載
供稿:網友

今天研究一個小問題: 怎么拿到JavaScript異步函數的返回值?

1.錯誤嘗試

當年未入行時,我的最初嘗試:

<script>function getSomething() { var r = 0; setTimeout(function() { r = 2; }, 10); return r;}function compute() { var x = getSomething(); alert(x * 2);}compute();</script>

2.回調函數

彈出的不是4,而是0,后來知道這是異步的問題,

要用回調技術來做:

<script>function getSomething(cb) { var r = 0; setTimeout(function() { r = 2; cb(r); }, 10);}function compute(x) { alert(x * 2);}getSomething(compute);</script>

3.promise

回調函數真是個好東西,然后一直這么寫代碼寫了很久。遇到異步就傳函數!!后來我知道有promise這一個東西,專門解決由于回調函數引起的問題,又學會了promise:

<script>function getSomething() { var r = 0; return new Promise(function(resolve) { setTimeout(function() {  r = 2;  resolve(r); }, 10); });}function compute(x) { alert(x * 2);}getSomething().then(compute);</script>

promise仍然沒有放棄回調,只是回調的位置發生了改變。

4.generator

再后來我又學會了generator,知道其有中斷函數執行的能力,又做了新的嘗試:

<script>function getSomething() { var r = 0; setTimeout(function() { r = 2; it.next(r); }, 10);}function *compute(it) { var x = yield getSomething(); alert(x * 2);}var it = compute();it.next();</script>

同步的寫法,能實現異步的邏輯,感覺高大上了很多。

5.promise + generator

后來又聽說promise加generator,才是異步的完美方式,趕緊用高射炮打蚊子(這個例子,還不足以說出二者在一起用的好處):

<script>function getSomething() { var r = 0; return new Promise(function(resolve) { setTimeout(function() {  r = 2;  resolve(r); }, 10); });}function *compute() { var x = yield getSomething(); alert(x * 2);}var it = compute();it.next().value.then(function(value) { it.next(value);});</script>

6.async

心想這算是夠

主站蜘蛛池模板: 文登市| 论坛| 嫩江县| 乌苏市| 乳源| 宜阳县| 商水县| 呼玛县| 彭州市| 科技| 富锦市| 镇安县| 理塘县| 阿鲁科尔沁旗| 正安县| 永川市| 新泰市| 乌拉特中旗| 乌兰浩特市| 彰化县| 黄梅县| 柘荣县| 金昌市| 呼图壁县| 汕尾市| 南昌县| 开江县| 拉萨市| 晋宁县| 体育| 如皋市| 东丰县| 北宁市| 大洼县| 桃园市| 武陟县| 水富县| 松潘县| 临颍县| 茶陵县| 景泰县|