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

資訊專欄INFORMATION COLUMN

快速理解和使用 ES7 await/async

Kross / 755人閱讀

摘要:是最重要特性之一,它是目前為止最佳的異步解決方案了。雖然沒有在中錄入,但很快就到來,目前已經(jīng)在階段。表示暫停,表示執(zhí)行下一步,如果你不了解也沒關(guān)系,可以忽略它直接學(xué)習(xí)。

await/async 是 ES7 最重要特性之一,它是目前為止 JS 最佳的異步解決方案了。雖然沒有在 ES2016 中錄入,但很快就到來,目前已經(jīng)在 ES-Next Stage 4 階段。

直接上例子,比如我們需要按順序獲取:產(chǎn)品數(shù)據(jù)=>用戶數(shù)據(jù)=>評(píng)論數(shù)據(jù)

老朋友 Ajax

傳統(tǒng)的寫法,無需解釋

// 獲取產(chǎn)品數(shù)據(jù)
ajax("products.json", (products) => {
    console.log("AJAX/products >>>", JSON.parse(products));

    // 獲取用戶數(shù)據(jù)
    ajax("users.json", (users) => {
        console.log("AJAX/users >>>", JSON.parse(users));

        // 獲取評(píng)論數(shù)據(jù)
        ajax("products.json", (comments) => {
            console.log("AJAX/comments >>>", JSON.parse(comments));
        });
    });
});
不算新的朋友 Promise

Promise 已經(jīng)被提及已久了,也是 ES6 的一部分。Promise 能消除 callback hell 帶來的厄運(yùn)金字塔,相比起來代碼更清晰了,但還是達(dá)不到編寫同步代碼的直觀程度。

// Promise
// 封裝 Ajax,返回一個(gè) Promise
function requestP(url) {
    return new Promise(function(resolve, reject) {
        ajax(url, (response) => {
            resolve(JSON.parse(response));
        });
    });
}

// 獲取產(chǎn)品數(shù)據(jù)
requestP("products.json").then((products) => {
    console.log("Promises/products >>>", products);
    // 獲取用戶數(shù)據(jù)
    return requestP("users.json");
}).then((users) => {
    console.log("Promises/users >>>", users);
    // 獲取評(píng)論數(shù)據(jù)
    return requestP("comments.json");
}).then((comments) => {
    console.log("Promises/comments >>>", comments);
});
強(qiáng)勁的新朋友 Generators

Generators 也是 ES6 一個(gè)新的特性,能夠 暫停/執(zhí)行 代碼。yield 表示暫停,iterator.next 表示執(zhí)行下一步,如果你不了解 Generators 也沒關(guān)系,可以忽略它直接學(xué)習(xí) await/async

// Generators
function request(url) {
    ajax(url, (response) => {
        iterator.next(JSON.parse(response));
    });
}

function *main() {
    // 獲取產(chǎn)品數(shù)據(jù)
    let data = yield request("products.json");

    // 獲取用戶數(shù)據(jù)
    let users = yield request("users.json");

    // 獲取評(píng)論數(shù)據(jù)
    let products = yield request("comments.json");

    console.log("Generator/products >>>", products);
    console.log("Generator/users >>>", users);
    console.log("Generator/comments >>>", comments);
}

var iterator = main();
iterator.next();
碉堡的朋友 await/async

與 Promise 結(jié)合使用

// 封裝 Ajax,返回一個(gè) Promise
function requestP(url) {
    return new Promise(function(resolve, reject) {
        ajax(url, (response) => {
            resolve(JSON.parse(response));
        });
    });
}

(async () => {
    // 獲取產(chǎn)品數(shù)據(jù)
    let data = await requestP("products.json");

     // 獲取用戶數(shù)據(jù)
    let users = await requestP("users.json");

     // 獲取評(píng)論數(shù)據(jù)
    let products = await requestP("comments.json");

    console.log("ES7 Async/products >>>", products);
    console.log("ES7 Async/users >>>", users);
    console.log("ES7 Async/comments >>>", comments);
}());

與 Fetch API 結(jié)合使用:

(async () => {
// Async/await using the fetch API
    try {

         // 獲取產(chǎn)品數(shù)據(jù)
        let products = await fetch("products.json");

        // Parsing products
        let parsedProducts = await products.json();

        // 獲取用戶數(shù)據(jù)
        let users = await fetch("users.json");

        // Parsing users
        let parsedUsers = await users.json();

        // 獲取評(píng)論數(shù)據(jù)
        let comments = await fetch("comments.json");

        // Parsing comments
        let parsedComments = await comments.json();


        console.log("ES7 Async+fetch/products >>>", parsedProducts);
        console.log("ES7 Async+fetch/users >>>", parsedUsers);
        console.log("ES7 Async+fetch/comments >>>", parsedComments);


    } catch (error) {
        console.log(error);
    }
}());

再次結(jié)合 Fetch

(async () => {
    let parallelDataFetch = await* [
        (await fetch("products.json")).json(),
        (await fetch("users.json")).json(),
        (await fetch("comments.json")).json()
    ];
    console.log("Async parallel+fetch >>>", parallelDataFetch);
}());

使用 await/async 用同步的思維去解決異步的代碼,感覺非常酷非常爽!

參考文獻(xiàn)[原文]:https://github.com/jaydson/es...

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

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

相關(guān)文章

  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評(píng)論0 收藏0
  • ES6&ES7中的異步之async函數(shù)

    摘要:更好的語義和分別表示異步和等待,比起和更容易理解。前邊聲明關(guān)鍵字,表示內(nèi)部有內(nèi)部操作,調(diào)用函數(shù)會(huì)返回一個(gè)對象。等價(jià)于其中函數(shù)就是自動(dòng)執(zhí)行器。 async函數(shù) 定義 async函數(shù)其實(shí)就是之前說過的Generator的語法糖,用于實(shí)現(xiàn)異步操作。它是ES2017的新標(biāo)準(zhǔn)。 讀取兩個(gè)文件: const fs = require(fs) const readFile = function(f...

    dongxiawu 評(píng)論0 收藏0
  • ES6系列文章 異步神器async-await

    摘要:有兩個(gè)陌生的關(guān)鍵字,同時(shí)函數(shù)執(zhí)行結(jié)果似乎返回了一個(gè)對象。用來表示函數(shù)是異步的,定義的函數(shù)會(huì)返回一個(gè)對象,可以使用方法添加回調(diào)函數(shù)。如果的是對象會(huì)造成異步函數(shù)停止執(zhí)行并且等待的解決如果等的是正常的表達(dá)式則立即執(zhí)行。 視頻講解 關(guān)于異步處理,ES5的回調(diào)使我們陷入地獄,ES6的Promise使我們脫離魔障,終于、ES7的async-await帶我們走向光明。今天就來學(xué)習(xí)一下 async-a...

    miqt 評(píng)論0 收藏0
  • 【譯】async/await 應(yīng)知應(yīng)會(huì)

    摘要:原文地址原文作者翻譯作者是在版本中引入的,它對于中的異步編程而言是一個(gè)巨大的提升。可能會(huì)產(chǎn)生誤導(dǎo)一些文章把和進(jìn)行了比較,同時(shí)說它是異步編程演變過程中的下一代解決方案,對此我不敢茍同。結(jié)論在中引入的關(guān)鍵字無疑是對異步編程的一大加強(qiáng)。 原文地址: https://hackernoon.com/javasc...原文作者: Charlee Li 翻譯作者: Xixi20160512 asy...

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

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

0條評(píng)論

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