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

資訊專欄INFORMATION COLUMN

Genrator淺析

NotFound / 1828人閱讀

摘要:通過可以做到按需獲取。切出的過程類似將一個值帶出協(xié)程同時主線程可以在一系列或者操作之后通過的方法與其通信恢復(fù)協(xié)程執(zhí)行。對象上部署接口使其具有可遍歷性

生成器的主要功能:通過一段程序,持續(xù)迭代或枚舉出符合某個公式或者算法的有序數(shù)列中的元素.

在js中的具體表現(xiàn)形式就是function*。通過generator可以做到按需獲取。
怎么理解,比如我們想獲取一定數(shù)量的fibonacci,可以通過下面這種方式;

function * fibo() {
    let a=0;
    let b=1;
    yield a;
    yield b;

    while (true){
        let next = a+b;
        a=b;
        b=next;
        yield  next;
    }
}
let generator=fibo();
for(let i=0;i<10;i++){
    process.stdout.write(generator.next().value+" ");
}
console.log(".")   //0 1 1 2 3 5 8 13 21 34 .

上面比較特殊的一點就是yield,作用與return類似,但并非退出函數(shù)體,而是切出函數(shù)運(yùn)行時。
切出的過程類似將一個值帶出協(xié)程(coroutine);同時主線程可以在一系列sync或者async操作之后,通過generator的next方法與其通信,恢復(fù)協(xié)程執(zhí)行。

隨意創(chuàng)建一個generator,通過其原型鏈查看到generator主要有一下幾個方法

generator.next(value) 獲取下一次生成器切出狀態(tài)(第一次執(zhí)行時為第一個切出狀態(tài))

generator.throw(error) 向當(dāng)前生成器返回執(zhí)行對象拋出錯誤,終止生成器運(yùn)行,除非被異常被捕獲

generator[Symbol.iterator] 為生成器提供實現(xiàn)可迭代的方法(通過for-of語句可用)

generator.return 返回給定的值,終結(jié)遍歷Generator函數(shù)

其中用的最多用的是第一個方法。

生成器主要應(yīng)用場景(現(xiàn)階段我感覺只有下面兩個用處)

同步化的方式表達(dá)異步操作,解決金字塔回調(diào)問題。

before like this

        //normal version
        function echo(content,cb) {
            cb(null,content);
        }
        function run() {
            echo("hello", (...rest0) => {
                 console.log(rest0[1]+" world");
            });
        }
        run();  //hello world

generator equivalent writing

//thunk version
function echo(content) {
    return cb => {
        cb(null,content);  //generator作為logic主體,主線程執(zhí)行異步方法
    }
}
function run(genFn) {
    const gen=genFn();
    const next= value =>{
        const ret=gen.next(value);
        if(ret.done)return;
        ret.value((err,val) => {  //async tasks
            if(err) return console.error(err);
            next(val);  //recursion
        });

    }
    next();
}
run(function* () {
    const msg0= yield  echo("hello");
    const msg1= yield  echo(`${msg0} world`);
    console.log(msg1); //hello world
});

說明 我上面這種寫法雖然簡單,但是很多變種庫都有其影子,例如co,koa1 and so on。

對象上部署Iterator接口,使其具有可遍歷性

function* setIterator(obj) {
     let keys = Object.keys(obj);
     for (let i=0,len=keys.length; i < len; i++) {
       let key = keys[i];
       yield [key, obj[key]];
     }
   }

   let obj = { name: "gcy", age: "infinity" };

   for (let [key, value] of setIterator(obj)) {
     console.log(key, value);
   }

// name gcy
// age infinity

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

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

相關(guān)文章

  • 用Promise、Generator、Async函數(shù)將異步操作同步化

    摘要:函數(shù)最簡單,不需要借助其他的執(zhí)行器即可按照順序執(zhí)行。函數(shù)執(zhí)行過程中遇到就會交出執(zhí)行權(quán)限,等到異步操作完成再進(jìn)行下面的操作,語句返回的是方法的參數(shù)。小程序不支持函數(shù),并且同時間最多支持個請求,所以被迫無奈,只能使用來做異步批量調(diào)用。 在日常開發(fā)的過程中總會遇到一些下一個請求需要上一個請求的響應(yīng)數(shù)據(jù)作為參數(shù)(或者坑爹的小程序開發(fā)只能同時最多請求5個),那么這個時候我們就需要批量地請求一批后...

    jaysun 評論0 收藏0
  • 淺析微信支付:支付驗收示例和驗收指引

    摘要:本文是淺析微信支付系列文章的第十一篇,主要講解支付驗收示例和驗收指引。為保證商戶接入質(zhì)量,提升交易安全及用戶體驗,微信支付的合作服務(wù)商在正式上線交易前,必須先根據(jù)本文指引完成驗收。 本文是【淺析微信支付】系列文章的第十一篇,主要講解支付驗收示例和驗收指引。 淺析微信支付系列已經(jīng)更新十一篇了喲~,沒有看過的朋友們可以看一下。 淺析微信支付:如何使用沙箱環(huán)境測試 淺析微信支付:下載對賬單...

    Cympros 評論0 收藏0
  • 淺析微信支付:如何使用沙箱環(huán)境測試

    摘要:本文是淺析微信支付系列文章的第十篇,主要講解如何使用沙箱環(huán)境來測試微信支付。圖為微信支付仿真測試系統(tǒng)后簡稱仿真系統(tǒng)的簡化原理圖。沙箱說明微信支付沙箱環(huán)境,是提供給微信支付商戶的開發(fā)者,用于模擬支付及回調(diào)通知。 本文是【淺析微信支付】系列文章的第十篇,主要講解如何使用沙箱環(huán)境來測試微信支付。 淺析微信支付系列已經(jīng)更新十篇了喲~,沒有看過的朋友們可以看一下。 淺析微信支付:下載對賬單和資...

    騫諱護(hù) 評論0 收藏0
  • 淺析微信支付:查詢訂單和關(guān)閉訂單

    摘要:本文是淺析微信支付系列文章的第七篇,主要講解微信商戶平臺的訂單查詢和關(guān)閉接口的使用。查詢訂單以下為微信官方的查詢訂單文檔應(yīng)用場景該接口提供所有微信支付訂單的查詢,商戶可以通過查詢訂單接口主動查詢訂單狀態(tài),完成下一步的業(yè)務(wù)邏輯。 本文是【淺析微信支付】系列文章的第七篇,主要講解微信商戶平臺的訂單查詢和關(guān)閉接口的使用。 淺析微信支付系列已經(jīng)更新六篇了喲~,沒有看過的朋友們可以看一下哦。 ...

    Dean 評論0 收藏0
  • 淺析微信支付:微信公眾號網(wǎng)頁授權(quán)

    摘要:淺析微信支付微信公眾號網(wǎng)頁授權(quán)本文是淺析微信支付系列文章的第四篇,主要講解微信支付前如何獲取獲取網(wǎng)頁授權(quán)及用戶信息獲取。淺析微信支付系列已經(jīng)更新三篇了喲,沒有看過的朋友們可以看一下哦。 淺析微信支付:微信公眾號網(wǎng)頁授權(quán) 本文是【淺析微信支付】系列文章的第四篇,主要講解微信支付前如何獲取獲取網(wǎng)頁授權(quán)及用戶信息獲取。 淺析微信支付系列已經(jīng)更新三篇了喲~,沒有看過的朋友們可以看一下哦。 淺...

    tinyq 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<