ES7中的Async/await及modal模块化

本文介绍了ES7中Async/await的使用,揭示了它如何简化异步编程,避免回调地狱。同时,详细阐述了JavaScript模块化,包括模块的定义、导出与导入,并展示了批量导出和重命名导出变量的实践方法,帮助开发者更好地理解和应用这些特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)、Async/await的基本使用

这是ES7的语法,它是基于generator函数做的语法糖。async用于申明一个function是异步的,返回一个promise对象,而await可以认为是async wait的简写,等待一个异步方法执行完成。async必须声明的是一个function,await必须在声明的函数内部使用。

<script>
// async 用于申明一个function是异步的,返回一个promise对象
async function demo() {
  setTimeout(() => {
    console.log('我是async声明的异步函数');
  },1000);
  return '我是异步函数的返回值';
}
demo();
console.log(demo());
demo().then(res => {
  console.log(res);
})
// await 可以async wait 的简写,必须出现再async的函数内部,不能单独使用
// await 等待的虽然是promise对象,但不用通过then获取返回值,而是直接得到返回值
async function demo2() {
  let result = await Promise.resolve(123);
  console.log(result);
}
demo2();
</script>

(2)、Async/await的应用

Promise虽然一方面解决了callback的回调地狱,但是相对的把回调“纵向发展”了,形成了一个回调链。例如:

<script>
function sleep(wait) {
  return new Promise((res,rej) => {
    setTimeout(() => {
      res(wait);
    },wait);
  });
}
sleep(100).then(result => {
  return sleep(result + 100);
}).then(result02 => {
  return sleep(result02 + 100);
}).then(result03 => {
  console.log(result03);
})
</script>

应用:可以看出后面的结果都是依赖前面的结果,await是强制把异步变成了同步,这一句代码执行完,才会执行下一句

async function demo() {
  let result01 = await sleep(100);
  // 上一个await执行完才会执行下个
  let result02 = await sleep(result01 + 100);
  let result03 = await sleep(result02 + 100);
  return result03;
} 
demo().then(result => {
  console.log(result);
})

Module模块

(1)、模块Module

模块Module:一个模块,就是一个对其他模块暴露自己的属性或者方法的文件。

在这里,我们会把module-A.js和module-B.js分别当作两个模块(moduleA模块和moduleB模块)来对待和处理。用这两个模块来演示如何暴露一个模块的属性或方法。

(2)、导出Export

导出Export:作为一个模块,它可以选择性地给其他模块暴露(提供)自己的属性和方法,供其他模块使用。

(3)、导入Import

导入Import:作为一个模块,可以根据需要,引入其他模块的提供的属性或者方法,供自己模块使用。

(4)、模块化的实现

带着这三个概念,我们来演示一下它们的基本用法:

        moduleB模块代码:

exprot var name = '前端君';

模块B我们使用关键字export关键字,对外暴露了一个属性:name的值为:字符串“前端君”。一个关键字,一句代码就实现了,是不是很简单。

模块B演示了导出,接下来我们用模块A来演示如何导入。

moduleA模块代码:

import {name} from './module-B.js';
console.log(name);

模块A我们使用关键字import导入了模块B的name属性,并且赋值给变量name。关键字from的作用是指定你想要引入的模块,我们这里指定的是module-B.js文件,也就是上面的模块B。打印结果:“前端君”正是模块B的对外暴露的属性。

(5)、批量导出

        对于模块B,如果你想导出(暴露)多个属性和方法的话

var name = '前端君';
var age = 23;
var say = function () {
    console.log('say hello');
}
export {name,age,say};

       上面,我们定义了2个属性和1个方法,最后用一个对象实现将它们批量导出。我们更推荐的是使用这种方法实现导出,因为当对外暴露的属性和方法较多的时候,这种方法可以更直观地看出当前模块暴露了哪些变量。

import {name,age,say} from './module-B.js';
console.log(name);
console.log(age);
say();

(6)、重命名导出的变量

import {name as newname} from './module-B.js';
console.log(newname);

(7)、整体导入

import * as obj from './module-B.js';
console.log(obj.name);
console.log(obj.age);
obj.say();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值