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

資訊專欄INFORMATION COLUMN

Generator初識

beita / 1295人閱讀

摘要:一簡介函數是引入的新型函數,用于異步編程,跟對象聯合使用的話會極大降低異步編程的編寫難度和閱讀難度。二簡單示例和注意函數不能直接使用,是通過方法獲取的返回結果,而可以提前終止函數。

一、簡介

Generator函數是ES6引入的新型函數,用于異步編程,跟Promise對象聯合使用的話會極大降低異步編程的編寫難度和閱讀難度。

與普通函數的區別:

function關鍵字與函數名之間有一個星號;

函數體內部使用yield語句,定義不同的內部狀態(yield在英語里的意思就是“產出”)。

二、簡單示例 1、yield和return
function* Foo() {
    yield "hello";
    yield "world";
    return "!";
}
var foo = Foo();

console.log(foo.next());
console.log(foo.next());
console.log(foo.next());

注意:generator函數不能直接使用,是通過next()方法獲取yield/return的返回結果,而return可以提前終止函數。foo.return("!")方法也可終止函數。
2、yield* 字符串方式
function* Foo() {
    yield* "hello";
}
var foo = Foo();

console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());

打印結果:

數組方式
function* Foo() {
    yield* ["a", "b", "c"];
}
var foo = Foo();

console.log(foo.next());
console.log(foo.next());
console.log(foo.next());
console.log(foo.next());

打印結果:

3、與for of配合使用 yield和return
function* Foo() {
    yield 1;
    yield 2;
    return 3;
}
var foo = Foo();

for(var v of foo) {
    console.log(v);
}

打印結果:

從上可以看出for of不執行return值

yield*
function* Foo() {
    yield* "hello";
}
var foo = Foo();

for(var v of foo) {
    console.log(v);
}

打印結果:

4、throw方法
function* Foo() {
    try {
        yield;
    } catch(e) {
        console.log("內部捕獲", e);
    }
}

var foo = Foo();
foo.next();

try {
    foo.throw("a");
    foo.throw("b");
} catch (e) {
    console.log("外部捕獲", e);
} 

三、配合Promise使用
function promiseFn() {
    new Promise(function(resolve, reject) {
        setTimeout(function() {
            foo.next("G");
        }, 1000);
    });
}

function* Foo() {
    var a = yield promiseFn();
    var b = yield promiseFn();
    console.log(a, 111);
    console.log(b, 222);
}

var foo = Foo(); // foo是全局變量,掛在window上,存在變量提升,在執行到promise異步的時候,可以直接使用
foo.next();

四、配合ajax使用

demo.php

"tom","age"=>rand()];
echo json_encode($a);

demo.html

function ajax() {
    $.ajax({
        type: "get",
        url: "demo.php",
        success: function(res) {
            foo.next(res);
        },
        error: function(error) {
            foo.next(error);
        }
    });
}

function* Foo() {
    var a = yield ajax();
    var b = yield ajax();
    console.log(a, 111);
    console.log(b, 222);
}

var foo = Foo();
foo.next();

打印結果:

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/101302.html

相關文章

  • PHP下的異步嘗試一:初識生成器

    摘要:下的異步嘗試系列下的異步嘗試一初識生成器下的異步嘗試二初識協程下的異步嘗試三協程的版自動執行器下的異步嘗試四版的下的異步嘗試五版的的繼續完善生成器類獲取迭代器當前值獲取迭代器當前值返回當前產生的鍵生成器從上一次處繼續執行重置迭代器向生成器中 PHP下的異步嘗試系列 PHP下的異步嘗試一:初識生成器 PHP下的異步嘗試二:初識協程 PHP下的異步嘗試三:協程的PHP版thunkify自...

    tomorrowwu 評論0 收藏0
  • 基于 Generator 和 Iterator 的惰性列表

    摘要:在某些不定長度的列表操作上,惰性列表會讓代碼和結構更靈活。方法本身是立即執行的,如果滿足條件,這里的方法會執行兩次。結語和是帶給我們的非常強大的語言層面的能力,它本身的求值可以看作是惰性的。 初識 Lazy List 如果有了解過 Haskell 的朋友,對下面的這些表達一定不陌生 repeat 1 -- => [1, 1, 1, 1, 1,...] cycle abc -- => a...

    superw 評論0 收藏0
  • 初識fetch

    摘要:后面可以跟對象,表示等待才會繼續下去執行,如果被或拋出異常則會被外面的捕獲。沒有獲取狀態方法,標準沒有提供獲取當前狀態或者的方法。只允許外部傳入成功或失敗后的回調。這種進度通知的功能還沒有用過,暫不知道如何替代。 始終不是很懂fetch的作用,然后查了很多資料,看了一篇不錯的文章,結合自己之前學習的Promise,然后做一篇文章,稍微記錄一下。傳統 Ajax 已死,Fetch 永生 雖...

    rickchen 評論0 收藏0
  • angular - 收藏集 - 掘金

    摘要:如何在中使用動畫前端掘金本文講一下中動畫應用的部分。與的快速入門指南推薦前端掘金是非常棒的框架,能夠創建功能強大,動態功能的。自發布以來,已經廣泛應用于開發中。 如何在 Angular 中使用動畫 - 前端 - 掘金本文講一下Angular中動畫應用的部分。 首先,Angular本生不提供動畫機制,需要在項目中加入Angular插件模塊ngAnimate才能完成Angular的動畫機制...

    AlexTuan 評論0 收藏0

發表評論

0條評論

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