一.一个牛逼闪闪的知识点Promise
npm install bluebird
二.牛逼闪闪的Promise只需三点
1.Promise是JS针对异步操作场景的解决方案
针对异步的场景,业界有很多解决方案,如回调、事件机制
Promise是一个对象,同时它也一种规范,针对异步操作约定了统一的接口,表示一个异步操作的最终结果以同步的方式来写代码,执行的操作是异步的,但是又保证程序的执行顺序是同步的。
原本是社区的一个规范的构想,被加入到ES6的语言标准里面,比如Chrom,Firefox浏览器已对它进行了实现。
2.Promise对象三种状态
未完成(pending)
已完成(fulfilled)
失败(rejected)
只能从未完成到已完成,或者从未完成到失败,不可逆的。
3.ES6的Promise语言标准、Promise/A+规范
Promise/A+规范算是之前的Promise/A规范的升级版,规定了行为标准,扩展了原来的规范,并且覆盖了一些约定俗成的行为,总之,它就是一个更为标准的Promise能力和使用的规范。
Promise/A与A+不同点
a.A+规范通过术语thenable来区分promise对象
b.A+定义onFulfilled/onRejected必须是作为函数来调用,而且调用过程必须是异步的
c.A+严格定义了then方式链式调用时onFulfilled/onRejected的调用顺序
4.如何使用Promise then方法
promiseObj.then(onFulfilled, onRejected)onFulfilled = function(value) { return promiseObj2}onRejected = function(err) {}
Promise会保证then方法回调的顺序,依次调用,会等前面的promise方法执行完成后才会执行后面then中的方法。
Promise最大的特点是:回调函数可以写成规范的链式的写法,程序流程可以很清楚。它的一整套接口可以实现很强大的功能,比如为多个异步操作部署一个回调函数,为多个回调函数中抛出的错误统一指定处理的方法等等。
5.在什么场景下使用
只要是异步编程的地方,都可以使用Promise,但不能Promise而Promise,如业务场景是很简单的异步操作,维护很容易了,没必要引入一个Promise库来重构。
6.Promise库
Promise库市面上有不少,如下所示:
bluebird
Q
then.js
es6-promise
ypromise
async
nativeo-promise-only
三.重点爬虫,更优雅的异步编
https协议是基于ssl/tls的http协议,所有数据都是在ssl/tls协议的封装之上传输的。
也就是说,https协议是在http协议的基础之上添加了ssl/tls握手及数据加密传输,因此,ssl/tls协议就是http和https最大区别。
在搭建https服务器的时候,需要有一个ssl证书。
四.Nodejs API
1.横扫Nodejs API-Buffer的实例
Buffer:用来处理二进制的数据。因为JS字符串是UTF-8的编码存储的,处理二进制的能力是很弱的,而网络层对于不同资源的请求、响应,甚至是文件都是二进制的方式来交互的,所以Node.js有这么一个接口,专门用于存放二进制数据的缓存区,并提供了一些方法来对缓存区数据进行进一步的处理。Buffer在Node.js中是要以全局访问的,不需要用require来加载。
> Buffer{ [Function: Buffer]poolSize: 8192,from: [Function: from],of: [Function: of],alloc: [Function: alloc],allocUnsafe: [Function: allocUnsafe],allocUnsafeSlow: [Function: allocUnsafeSlow],isBuffer: [Function: isBuffer],compare: [Function: compare],isEncoding: [Function: isEncoding],concat: [Function: concat],byteLength: [Function: byteLength],[Symbol(kIsEncodingSymbol)]: [Function: isEncoding] }> new Buffer(‘Hello Node.js‘)<Buffer 48 65 6c 6c 6f 20 4e 6f 64 65 2e 6a 73>> new Buffer(‘Hello Node.js‘, ‘base64‘);<Buffer 1d e9 65 a0 da 1d 7a 3b>> var buf = new Buffer(8);undefined> buf.length8> var buf = new Buffer(‘12345678‘);console.log(buf);<Buffer 31 32 33 34 35 36 37 38>undefined> var buf = new Buffer(7);buf.write(‘12345678‘);console.log(buf);<Buffer 31 32 33 34 35 36 37>undefined> var buf = new Buffer([1,2,3,4]);console.log(buf);<Buffer 01 02 03 04>undefined> console.log(buf[1])2undefined> var buf = new Buffer([1,2.33,3.11,4]);console.log(buf);<Buffer 01 02 03 04>undefined> console.log(buf[1])2undefined
a.buffer.write(string, offset=0, length, encoding=‘utf8‘)方法
> var buf = new Buffer(‘Hello 慕课网‘)undefined> buf.length15> buf.write(‘Hi 慕课网‘)12> buf.toString()‘Hi 慕课网网‘> buf.length15> buf.write(‘ ImoocImoocImooc‘, 2, 16)13> buf.toString()‘Hi ImoocImoocIm‘
b.buffer.copy(target, tStart, sStart, sEnd=buffer.length)
> var buf = new Buffer(‘Hello Imooc‘)undefined> buf.length11> var buf2 = new Buffer(5)undefined> buf.copy(buf2)5> buf2.toString()‘Hello‘> buf.copy(buf2, 0, 6, 11)5> buf2.toString()‘Imooc‘
c.buffer.js源码
var buffer = process.binding(‘buffer‘);process.binding它是一个桥梁,javaScript代码就可以和C++代码进行交互,这条语句获取到C++里面实现的buffer模块> var buf = new Buffer(‘imooc‘);undefined> var str = buf.toString(‘base64‘);undefined> str‘aW1vb2M=‘> var buf = new Buffer(‘aW1vb2M=‘, ‘base64‘)undefined> var str = buf.toString()undefined> str‘imooc‘> var buf = new Buffer(‘aW1vb2M=‘, ‘base64‘)undefined> var str = buf.toString(‘hex‘)undefined> str‘696d6f6f63‘> var buf = new Buffer(‘696d6f6f63‘, ‘hex‘)undefined> var str = buf.toString(‘utf8‘)undefined> str‘imooc‘>
2.Stream流
Readable:可读流,负责读取外部的数据,并把数据缓存到内部的Buffer数组
Writable:可写流,负责消费数据,从可读流里获取到数据,然后对得到的数据块进行处理
Duplex:双工流,实现了Readable、Writable两个接口,如TcpSocket
Transform:转换流,也是双工的,可读可写,实现了Readable、Writable两个接口,但不保留数据
学习视频《进击Node.js基础(二)》。
进击Node.js基础(二)
原文地址:https://www.cnblogs.com/flyingeagle/p/9032826.html