01-控制台输出
//打印输出
console.log('这是输出内容!');
//打印错误
console.error('这是错误信息');
//打印时间戳
console.time('时间');
console.log('console.time');
for(var i=0; i<10; i++){
console.log(i);
}
console.error('console.timeEnd');
console.timeEnd('时间');
2018-09-20_121542.png
02-nodeJs作用域
// 定义模块 show.js
// 把变量挂在全局 都可以使用
global.username = '李寻欢'
function show (username) {
console.log(`${username}很秀!!!`)
}
console.log(arguments.callee.toString())
// 暴露出去
module.exports = show;
// 引入模块 main.js
var show = require('./show');
console.log(show);
show(username);
a.)函数声明和函数表达式
<script >
// sayHi();
// sayHello();
console.log(sayHi, sayHello)
// 函数声明
function sayHi () {
console.log('Hi !!!')
}
// 函数表达式 (变量会提升 但是赋值 保留在原位)
var sayHello = function () {
console.log('Hello !!!')
}
sayHello();
</script>
03-回调函数
01.)-callBack定时器.js
// 定时器
function cb () {
console.log('哈哈')
}
setTimeout(cb, 1000)
setTimeout(function () {
console.log('呵呵')
}, 1000)
02.)-callBack事件.html
<button id="btn">按钮</button>
<script>
// 绑定事件回调函数
$('#btn').on('click', function () {
alert('嘿嘿')
})
</script>
04-Events事件模块
01-ES5事件模块入门.js
// 引入事件 events 模块
var EventEmitter = require("events").EventEmitter;
// 根据这个 EventEmitter 创建实例 (这个实例可以用来 监听事件 触发事件)
var myEvent = new EventEmitter();
// 监听事件
myEvent.on('myevent', function (name) {
console.log(name + ':我被触发了!好开心!')
})
// 触发事件
myEvent.emit('myevent', '李寻欢');
/*
小结:
1) 通过on监听的事件,可以通过emit触发
2) 监听的事件类型 可以自定义, 触发的时候保持一致即可.
*/
02-ES6事件模块入门.js
// 移入events模块
const Events = require('events');
// 写一个子类 继承父类
class MyEmitter extends Events {}
// 根据子类 创建实例 (这个实例可以用来监听事件 触发事件)
const myEvent = new MyEmitter();
// 监听事件
myEvent.on('myevent', (name) => {
console.log(`我被${name}触发了`);
})
// 触发事件
myEvent.emit('myevent', '李寻欢');
03-ES6事件模块其他API.js
// 1) 引入events模块
const Events = require('events');
// 2) 写一个子类 继承父类
class MyEmitter extends Events {};
// 3) 根据子类 创建实例 (这个实例可以用来监听事件 触发事件)
const myEvent = new MyEmitter();
// 监听器(回调函数)
var cb = (name) => {
console.log(`我被${name}触发了`)
}
// var cb1 = (name) => {
// console.log(`我被${name}触发了`)
// }
// 设置最大监听数量
myEvent.setMaxListeners(5);
// 监听事件
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
// myEvent.on('myevent1', cb1)
// 只触发一次
// myEvent.once('myevent', (name) => {
// console.log(`我被${name}触发了`)
// })
// 监听事件 和 on一样
// myEvent.addListener('myevent1', (name) => {
// console.log(`我被${name}触发了`)
// })
// 移除指定的监听器
// myEvent.removeListener('myevent', cb);
// 移除所有监听器
// myEvent.removeAllListeners();
// 触发事件
myEvent.emit('myevent', '李寻欢');
// myEvent.emit('myevent1', '小李飞刀');
05-同步和异步
同步: 阻塞 (后面的代码 必须要等待前面的代码执行完毕 安装从上到下的顺序执行)
异步: 不阻塞 ( 不阻塞代码 同时执行 )
同步:总是等待上一个任务完成后,才开始下一个任务的执行
异步:开始一个(异步)任务,任务去执行,但是不会让后面的任务等待(阻塞),后面的任务继续执行
01-同步和异步的认识
nodejs常见异步编程方式:
- 回调函数(定时器)
- 事件绑定(基于回调)
- Promise
1) 回调函数(定时器)
<script>
// 同步代码
// console.log('1');
// alert('2');
// console.log('2')
// console.log('3')
// 异步代码
console.log('1');
// 定时器 (异步)
setTimeout(() => {
console.log('2')
}, 1000)
// 定时器 (异步)
setTimeout(() => {
console.log('3')
}, 2000)
console.log('4')
for (var i = 0; i < 1000000000; i++) {}
console.log('5')
//打印结果为:1 4 5 2 3
</script>
02-文件异步读取
2) 事件绑定(基于回调)
//fs:文件系统模块,提供对文件的操作
var fs = require("fs");
//创建输出流,读取文件
var stream = fs.createReadStream("./readme.txt");
//读取数据事件,每次读取都会触发。
stream.on("data",function(data){
console.log(data.toString());
});
//读取数据完毕
stream.on("end",function(){
console.log("文件读取完毕");
});
console.log('代码执行到了');
3) Promise
Promise(承诺) 就是一个对象,用来传递异步操作的消息。它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的 API,可供进一步处理。
7. Promise是ES6的一个对象(要用的时候要new出来哦!)
1) Promise有三种状态:
进行中 pending
已成功 resolved
已失败 rejected
2) 状态的改变 有两种
进行中 pending => 已成功 resolved
进行中 pending => 已失败 rejected
3) 基本使用伪代码
var promise = new Promise((resolve, reject) => {
// 这里会有很多的逻辑代码
if (成功) {
resolve(data) // 如果成功 用resolve处理
} else {
reject(error) // 如果失败 用reject处理
}
})
.then((data) => {
// 接收成功的数据
}, (err) => {
// 打印失败的提示
})