async和await
- async用于申明一个function是异步的,而await用于等待一个异步方法执行完成
async
async函数,真正意义上去解决异步回调的问题,同步流程表达异步操作,是Generator的语法糖 ```javascript async function foo(){ await 异步操作; await 异步操作; } //返回一个Promise对象,如果在函数中return一个直接量,async会把这个直接量通过Promise.resolve()封装成promise对象
<a name="j7QCV"></a>
### await
1. async取代Generator函数的星号*,await取代Generator的yield
2. 不需要像Generator去调用next,遇到await等待,当前的异步操作完成就往下执行
3. await是个运算符,用于组成表达式,那await表达式的运算结果就是它等到的东西
4. 如果等到的不是一个promise对象,那await表达式的运算结果就是它等到的东西
5. 如果它等到的是promise对象,await会阻塞后面的代码,等着promise对象resolve,然后得到resolve的值,作为await表达式的结果
6. 如果promise执行结果为reject,则await无返回值,退出当前的async函数
7. await会等promise对象状态发生变化,如果是pending状态,就一直等,如果是resolved状态,就会自动执行下面的代码,如果是rejected状态,就会退出当前async函数
8. 执行async函数,返回值是一个promise对象时,promise对象状态,只有async函数所有代码全部执行完了才会变成成功状态
```javascript
async function fn(){
console.log("333");
const re2 = await new Promise((resolve,reject) => {
setTimeout(function(){
console.log(222);
reject("heng")
},2000)
})
console.log(111);
console.log(re2);
return "hello";//返回成功结果值
}
const re = fn();
re.catch((error)=>{console.log(error)})//解决await的reject状态报错
re.then((data)=>{console.log(data)})//data是成功结果 函数返回值
console.log(re);
nodejs
- nodejs就是运行在服务端的js
- 是一门后端语言
- 为前后端交互打基础,构建前端的开发环境 自动化构建工具
-
安装/运行
傻瓜安装,安装完打开cmd,输入node-v查看当前node版本
- 当前目录命令行运行 node xx文件名
- 文件按tab可补全,ctrl+c退出指令
- 每次修改js文件需要重新执行才能生效,可安装nodemon监视文件改动,自动重启
配置本地服务器
```javascript const http = require(‘http’); //引入内置模块 let server = http.createServer((req,res)=>{ //设置编码格式 res.setHeader(‘Content-Type’,’text/html;charset=utf-8’); //req:request 请求 //res:response 返回 res.end(‘hello world’); //给浏览器返还一个hello world }) //通过http模块创建服务器
//设置端口号 server.listen(3939)
//如何访问? //localhost:端口号 //127.0.0.1:端口号 //ip地址:端口号 局域网内可以相互访问 ipconfig 查找自身ip
//一个端口只能启动一个服务 //netstat -ano查看端口的使用情况 查找pid
<a name="CpdFj"></a>
## nodejs模块化
1. node中使用的是CommonJS规范来实现的模块化
<a name="vzgm9"></a>
### 引入
```javascript
require('./路径.js'); //导入
module.exports //导出(多)
exports
let obj = require('./amodule');
//自动查找目录下的文件
//新建一个package.json文件修改 单入口
//npm init 快速创建一个package.json文件
//模块名称不能是中文
//引入指定目录的模块 node_modules
let bmodule = require('bmodule');
//自动编译.json和.node文件后缀