详解JavaScript里的await/async的作用和用法

详解JavaScript里的await/async的作用和用法

JavaScript里的await/async的作用和用法

分享: 

await/async是ES7最重要特性之一,它是目前为止JS最佳的异步解决方案了。虽然没有在ES2016中录入,但很快就到来,目前已经在 ES-NextStage4阶段。

直接上例子,比如我们需要按顺序获取:产品数据=>用户数据=>评论数据

立即学习“Java免费学习笔记(深入)”;

老朋友 Ajax

传统的写法,无需解释

// 获取产品数据ajax('products.json', (products) => {    console.log('AJAX/products >>>', JSON.parse(products));    // 获取用户数据    ajax('users.json', (users) => {        console.log('AJAX/users >>>', JSON.parse(users));        // 获取评论数据        ajax('products.json', (comments) => {            console.log('AJAX/comments >>>', JSON.parse(comments));        });    });});

登录后复制

不算新的朋友 Promise

Promise 已经被提及已久了,也是 ES6 的一部分。Promise 能消除 callback hell 带来的厄运金字塔,相比起来代码更清晰了。

// Promise// 封装 Ajax,返回一个 Promisefunction requestP(url) {    return new Promise(function(resolve, reject) {        ajax(url, (response) => {            resolve(JSON.parse(response));        });    });}// 获取产品数据requestP('products.json').then(function(products){    console.log('Promises/products >>>', products);});// 获取用户数据requestP('users.json').then(function(users){    console.log('Promises/users >>>', users);});// 获取评论数据requestP('comments.json').then(function(comments){    console.log('Promises/comments >>>', comments);});

登录后复制

当然使用 Promise.all 可以更简洁

Promise.all([    requestP('products.json'),    requestP('users.json'),    requestP('comments.json')]).then(function(data) {    console.log('Parallel promises >>>', data);});

登录后复制

强劲的新朋友 Generators

Generators 也是 ES6 一个新的特性,能够 暂停/执行 代码。yield 表示暂停,iterator.next 表示执行下一步,如果你不了解 Generators 也没关系,可以忽略它直接学习 await/async。

// Generatorsfunction request(url) {    ajax(url, (response) => {        iterator.next(JSON.parse(response));    });}function *main() {    // 获取产品数据    let data = yield request('products.json');    // 获取用户数据    let users = yield request('users.json');    // 获取评论数据    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 结合使用// 封装 Ajax,返回一个 Promisefunction requestP(url) {    return new Promise(function(resolve, reject) {        ajax(url, (response) => {            resolve(JSON.parse(response));        });    });}(async () => {    // 获取产品数据    let data = await requestP('products.json');     // 获取用户数据    let users = await requestP('users.json');     // 获取评论数据    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 结合使用:

(async () => {// Async/await using the fetch API    try {         // 获取产品数据        let products = await fetch('products.json');        // Parsing products        let parsedProducts = await products.json();        // 获取用户数据        let users = await fetch('users.json');        // Parsing users        let parsedUsers = await users.json();        // 获取评论数据        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);    }}());

登录后复制

按数组顺序执行

(async () => {    let parallelData = await* [        requestP('products.json'),        requestP('users.json'),        requestP('comments.json')    ];    console.log('Async parallel >>>', parallelData);}());

登录后复制

再次结合 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 用同步的思维去解决异步的代码,感觉非常酷非常爽!

推荐教程:《js基础教程》

以上就是详解JavaScript里的await/async的作用和用法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2727980.html

(0)
上一篇 2025年3月7日 23:51:10
下一篇 2025年3月1日 17:30:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 直击Javascript的严格模式(“use strict”)

    Javascript 严格模式(“use strict”)详解 分享:  除了正常运行模式,ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行…

    2025年3月7日
    200
  • JavaScript 复杂判断的优雅写法

    前提 我们编写js代码时经常遇到复杂逻辑判断的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题,随着逻辑复杂度的增加,代码中的if/else/switch会变得越来越臃肿,越来越看不懂,那么如何更优雅的…

    编程技术 2025年3月7日
    200
  • JavaScript如何实现“全选”和"全不选"功能?(代码示例)

    本篇文章给大家介绍一下使用javascript实现“全选”和”全不选”功能的方法,文中通过示例代码介绍的非常详细。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 代码如下 nbsp;html>…

    2025年3月7日
    200
  • JavaScript复杂判断的优雅写法

    前提 我们编写js代码时经常遇到复杂逻辑判断的情况,通常大家可以用if/else或者switch来实现多个条件判断,但这样会有个问题,随着逻辑复杂度的增加,代码中的if/else/switch会变得越来越臃肿,越来越看不懂,那么如何更优雅的…

    2025年3月7日
    200
  • 直击JavaScript全栈教程

    自从一年前发布了Vuejs小书的电子书,也有些日子没有碰过它们了,现在因为项目的缘故,需要使用JavaScript全栈开发。所以,我得把这个全栈环境搭建起来。 整个系列,是会采用我的一贯风格,就是不疾不徐,娓娓道来,学习完毕,你可以掌握我提…

    2025年3月7日
    200
  • JS 中可以提升幸福度的小技巧

    本文主要介绍一些JS中用到的小技巧,可以在日常Coding中提升幸福度,将不定期更新~ 感兴趣的同学可以加文末的微信群,一起讨论吧~ 1. 类型强制转换 1.1 string强制转换为数字 可以用*1来转化为数字(实际上是调用.valueO…

    2025年3月7日
    200
  • JS 家的排序算法 – 前端

    引子 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements JavaScript. 当年,想凭借抱Java大腿火一把而不惜把自己名字给改了的JavaScript(原名LiveScript),如今早已光芒万丈。node JS的出…

    2025年3月7日 编程技术
    200
  • JavaScript 开发者常用的 10 个技巧

    我们知道,JavaScript 这门语言正在高速发展中。伴随着 ES2020,又有很多很棒的功能加入。老实说,您可以通过许多不同的方式编写代码。实现同样一个功能,有的代码很长而有的却很短。你可以通过一些小技巧来让你的代码更干净清晰。下面这些…

    2025年3月7日
    200
  • 轻松理解函数防抖和节流的使用

    前言 函数防抖和节流,这个知识点面试中被问的概率比较高。 防抖 非立即执行版防抖可以理解为n时间后执行一次函数。立即执行版防抖是立即执行一次函数。 防抖的实现 /** * @desc 函数防抖 * @param {Function} fun…

    编程技术 2025年3月7日
    200
  • 对JavaScript开发者非常有用的10个奇淫巧计

    你可能错过这些非常有用的技巧。 翻译自 10 Super Useful Tricks for JavaScript Developers,作者 Mahdhi Rezvi。 我们知道,JavaScript 这门语言正在高速发展中。伴随着 ES…

    编程技术 2025年3月7日
    200

发表回复

登录后才能评论