国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

generator、co模塊和async三者的區(qū)別

lanffy / 1402人閱讀

摘要:也就是說(shuō),函數(shù)的執(zhí)行,與普通函數(shù)一模一樣,只要一行。表示函數(shù)里有異步操作,表示緊跟在后面的表達(dá)式需要等待結(jié)果。函數(shù)庫(kù)約定,命令后面只能是函數(shù)或?qū)ο螅瘮?shù)的命令后面,可以跟對(duì)象和原始類型的值數(shù)值字符串和布爾值,但這時(shí)等同于同步操作。

generator 特點(diǎn)

function*

可以使用yield返回多次

調(diào)用方法

使用next()執(zhí)行g(shù)enerator代碼,每次遇到y(tǒng)ield就返回一個(gè)對(duì)象{ value: x, done: true/false }, 如果donetrue,則value就是return的返回值,沒(méi)有return就返回undefined,如果return語(yǔ)句后面還有yield,這個(gè)generator對(duì)象就全部執(zhí)行完成,不要再繼續(xù)調(diào)用next()

直接用for ... of循環(huán)迭代generator對(duì)象,這種方式不需要我們自己判斷done

for (var x of fib(5)) {
    console.log(x); // 依次輸出0, 1, 1, 2, 3
}

如果給next方法傳參數(shù), 那么這個(gè)參數(shù)將會(huì)作為上一次yield語(yǔ)句的返回值

function* foo(x) {
    var y = 2 * (yield (x + 1));
    var z = yield (y / 3);
    return (x + y + z);
}

var a = foo(5);
a.next() // Object{value:6, done:false}
a.next() // Object{value:NaN, done:false}
a.next() // Object{value:NaN, done:true}

var b = foo(5);
b.next() // { value:6, done:false }
b.next(12) // { value:8, done:false }
b.next(13) // { value:42, done:true }
作用

ajax的異步處理

function* main() {
    var result = yield request("http://www.filltext.com?rows=10&f={firstName}");
    console.log(result);
    //do 別的ajax請(qǐng)求;
}
co模塊 模塊思路

co 模塊的思路就是利用 generator 的這個(gè)特性,將異步操作跟在 yield 后面,當(dāng)異步操作完成并返回結(jié)果后,再觸發(fā)下一次 next() 。當(dāng)然,跟在 yield 后面的異步操作需要遵循一定的規(guī)范 thunks 和 promises。

function co(gen) {
    var it = gen();
    var ret = it.next();
    ret.value.then(function(res) {
        it.next(res);
    });
}
function sayhello() {
    return Promise.resolve("hello").then(function(hello) {
        console.log(hello);
    });
}
co(function *helloworld() {
    yield sayhello();
    console.log("world");
});
async優(yōu)點(diǎn)

內(nèi)置執(zhí)行器。 Generator 函數(shù)的執(zhí)行必須靠執(zhí)行器,所以才有了 co 函數(shù)庫(kù),而 async 函數(shù)自帶執(zhí)行器。也就是說(shuō),async 函數(shù)的執(zhí)行,與普通函數(shù)一模一樣,只要一行。

更好的語(yǔ)義。 async 和 await,比起星號(hào)和 yield,語(yǔ)義更清楚了。async 表示函數(shù)里有異步操作,await 表示緊跟在后面的表達(dá)式需要等待結(jié)果。

更廣的適用性。 co 函數(shù)庫(kù)約定,yield 命令后面只能是 Thunk 函數(shù)或 Promise 對(duì)象,而 async 函數(shù)的 await 命令后面,可以跟 Promise 對(duì)象和原始類型的值(數(shù)值、字符串和布爾值,但這時(shí)等同于同步操作)。

Express 和 Koa 的區(qū)別 Express

優(yōu)點(diǎn):線性邏輯,通過(guò)中間件形式把業(yè)務(wù)邏輯細(xì)分、簡(jiǎn)化,一個(gè)請(qǐng)求進(jìn)來(lái)經(jīng)過(guò)一系列中間件處理后再響應(yīng)給用戶,清晰明了。
缺點(diǎn):基于 callback 組合業(yè)務(wù)邏輯,業(yè)務(wù)邏輯復(fù)雜時(shí)嵌套過(guò)多,異常捕獲困難。

Koa

優(yōu)點(diǎn):首先,借助 co 和 generator,很好地解決了異步流程控制和異常捕獲問(wèn)題。其次,Koa 把 Express 中內(nèi)置的 router、view 等功能都移除了,使得框架本身更輕量。
缺點(diǎn):社區(qū)相對(duì)較小。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90119.html

相關(guān)文章

  • 夯實(shí)基礎(chǔ)-JavaScript異步編程

    摘要:調(diào)用棧被清空,消息隊(duì)列中并無(wú)任務(wù),線程停止,事件循環(huán)結(jié)束。不確定的時(shí)間點(diǎn)請(qǐng)求返回,將設(shè)定好的回調(diào)函數(shù)放入消息隊(duì)列。調(diào)用棧執(zhí)行完畢執(zhí)行消息隊(duì)列任務(wù)。請(qǐng)求并發(fā)回調(diào)函數(shù)執(zhí)行順序無(wú)法確定。 異步編程 JavaScript中異步編程問(wèn)題可以說(shuō)是基礎(chǔ)中的重點(diǎn),也是比較難理解的地方。首先要弄懂的是什么叫異步? 我們的代碼在執(zhí)行的時(shí)候是從上到下按順序執(zhí)行,一段代碼執(zhí)行了之后才會(huì)執(zhí)行下一段代碼,這種方式...

    shadowbook 評(píng)論0 收藏0
  • 異步流程控制:7 行代碼學(xué)會(huì) co 模塊

    摘要:而在中是迭代器生成器,被創(chuàng)造性的拿來(lái)做異步流程控制了。當(dāng)執(zhí)行的時(shí)候,并不執(zhí)行函數(shù)體,而是返回一個(gè)迭代器。行代碼再看看文章開(kāi)頭的行代碼首先生成一個(gè)迭代器,然后執(zhí)行一遍,得到的是一個(gè)對(duì)象,里面再執(zhí)行。 廣告招人:阿里巴巴招前端,在這里你可以享受大公司的福利和技術(shù)體系,也有小團(tuán)隊(duì)的挑戰(zhàn)和成長(zhǎng)空間。聯(lián)系: qingguang.meiqg at alibaba-inc.com 首先請(qǐng)?jiān)徫业臉?biāo)題...

    tinna 評(píng)論0 收藏0
  • 【面試篇】寒冬求職季之你必須要懂原生JS(中)

    摘要:如果你還沒(méi)讀過(guò)上篇上篇和中篇并無(wú)依賴關(guān)系,您可以讀過(guò)本文之后再閱讀上篇,可戳面試篇寒冬求職季之你必須要懂的原生上小姐姐花了近百個(gè)小時(shí)才完成這篇文章,篇幅較長(zhǎng),希望大家閱讀時(shí)多花點(diǎn)耐心,力求真正的掌握相關(guān)知識(shí)點(diǎn)。 互聯(lián)網(wǎng)寒冬之際,各大公司都縮減了HC,甚至是采取了裁員措施,在這樣的大環(huán)境之下,想要獲得一份更好的工作,必然需要付出更多的努力。 一年前,也許你搞清楚閉包,this,原型鏈,就能獲得...

    andycall 評(píng)論0 收藏0
  • 【面試篇】寒冬求職季之你必須要懂原生JS(中)

    摘要:如果你還沒(méi)讀過(guò)上篇上篇和中篇并無(wú)依賴關(guān)系,您可以讀過(guò)本文之后再閱讀上篇,可戳面試篇寒冬求職季之你必須要懂的原生上小姐姐花了近百個(gè)小時(shí)才完成這篇文章,篇幅較長(zhǎng),希望大家閱讀時(shí)多花點(diǎn)耐心,力求真正的掌握相關(guān)知識(shí)點(diǎn)。 互聯(lián)網(wǎng)寒冬之際,各大公司都縮減了HC,甚至是采取了裁員措施,在這樣的大環(huán)境之下,想要獲得一份更好的工作,必然需要付出更多的努力。 一年前,也許你搞清楚閉包,this,原型鏈,就...

    Mike617 評(píng)論0 收藏0
  • js 處理異步操作幾種方式

    摘要:如果我們只有一個(gè)異步操作,用回調(diào)函數(shù)來(lái)處理是完全沒(méi)有任何問(wèn)題的。事件監(jiān)聽(tīng)使用事件監(jiān)聽(tīng)的方式番禺廣州上述代碼需要實(shí)現(xiàn)一個(gè)事件監(jiān)聽(tīng)器。只處理對(duì)象廣州番禺函數(shù)將函數(shù)的自動(dòng)執(zhí)行器,改在語(yǔ)言層面提供,不暴露給用戶。 概論 由于 JavaScript 是一門單線程執(zhí)行的語(yǔ)言,所以在我們處理耗時(shí)較長(zhǎng)的任務(wù)時(shí),異步編程就顯得尤為重要。js 處理異步操作最傳統(tǒng)的方式是回調(diào)函數(shù),基本上所有的異步操作都可以...

    Meils 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<