-
一、buffer: tcp/图像/文件/网络
1、poolSize: 内存载体的容量
2、isBuffer
3、compare:判断buffer对象的相对位置,字符串排序
4、isEncoding:nodeJs是否支持某种编码
5、concat:连接buffer对象
6、byteLength:获得指定编码下字节长度。
二、buffer源码,1000行左右
1、process.binding使javascript代码和c++代码能够进行交互。
2、smalloc:操作内存和分配内存的对象
smalloc.alloc:生成内存的方法
查看全部 -
一、buffer和stream
1、buffer
(1)缓冲,nodeJs处理二进制的数据。js字符串数据‘utf-8’格式。
(2)全局的,不需要require引入。是一个构造函数,有自己的属性和方法。
(3)实例化Buffer
①new 一个实例化对象
new Buffer('hello');
② 内存空间实例化
var buf = new Buffer(8); // 8:内存空间的大小
③ 数组方式实例化的对象,可以直接用下标访问。通过下标取到的值是直接取整,如果原先是小数,取出来的就是整数了。
var buf = new Buffer([1, 2, 3, 4]);
查看全部 -
一、https协议是在http协议的基础上添加了SSL和TLS
二、https模块主要是处理加密访问的。搭建https的时候需要ssl证书。
三、并发控制,同时去爬。Promise.all();
查看全部 -
一、异步操作解决方案:
回调
事件机制
对事件进行监听
对某个异步操作增加事件的触发,包括订阅者、发布者等观察者模式
promise
二、Promise是一个对象,与其他javascript对象没有其他区别
三、Promise对象的三种状态
1、未完成 pending
2、已完成 fufilled
3、 失败 rejected
四、jquery中的promise,then返回的不是新的promise,只是改变了promise的状态。
五、promise then 方法:
1、then方法必须是返回一个promise对象。
2、then接收2个参数,这2个参数都可以省略。
3、promise会保证then的回调顺序。
查看全部 -
一、webstorm列编辑,多行编辑快捷键:
按住alt键鼠标选择要修改的字符串,然后输入文字就会编辑多行。
二、动画一般一秒钟60帧,是比较流畅的帧率。
三、安装bluebird,aSuncat:现在的nodejs不安装bluebird就能用promise(es6语法)。
1、cd promise
2、npm install bluebird
查看全部 -
<!doctype><html> <head> <title>Promise animation</title> <style type="text/css"> .ball { width: 40px; height: 40px; border-radius: 20px; } .ball1 { background: red; } .ball2 { background: yellow; } .ball3 { background: green; } </style> <script type="text/javascript" src="./node_modules/bluebird/js/browser/bluebird.js"></script> </head> <body> <div class="ball ball1" ></div> <div class="ball ball2" ></div> <div class="ball ball3" ></div> <script type="text/javascript"> var ball1 = document.querySelector('.ball1') var ball2 = document.querySelector('.ball2') var ball3 = document.querySelector('.ball3') function animate(ball, distance, cb) { setTimeout(function() { var marginLeft = parseInt(ball.style.marginLeft, 10) if(marginLeft === distance){ cb && cb() }else{ if(marginLeft < distance){ marginLeft++ }else{ marginLeft-- } ball.style.marginLeft = marginLeft + 'px' animate(ball, distance, cb) } }, 13) } /*animate(ball1, 100, function() { animate(ball2, 200, function() { animate(ball3, 300, function() { animate(ball3, 150, function() { animate(ball2, 150, function() { animate(ball1, 150, function() { }) }) }) }) }) })*/ var promise = window.Promise function promiseAnimate(ball, distance) { return new Promise(function(resolve, reject) { function _animate() { setTimeout(function() { var marginLeft = parseInt(ball.style.marginLeft, 10) if(marginLeft === distance){ resolve() }else{ if(marginLeft < distance){ marginLeft++ }else{ marginLeft-- } ball.style.marginLeft = marginLeft + 'px' _animate() } }, 13) } _animate() }) } promiseAnimate(ball1, 100) .then(function() { return promiseAnimate(ball2, 200) }) .then(function() { return promiseAnimate(ball3, 300) }) .then(function() { return promiseAnimate(ball3, 150) }) .then(function() { return promiseAnimate(ball2, 150) }) .then(function() { return promiseAnimate(ball1, 150) }) </script> </body></html>
查看全部 -
用promise重构爬虫代码- new一个promise对象爬取每一节课程信息
查看全部 -
使用promise爬取多个页面查看全部
-
Https服务器查看全部
-
Pipe左边是可读流,右边是输出流
查看全部 -
Node.js 中有四种基本的流类型:
Readable - 可读的流 (例如 fs.createReadStream()).
Writable - 可写的流 (例如 fs.createWriteStream()).
Duplex - (双工流)可读写的流 (例如 net.Socket).
Transform - (转换流)在读写过程中可以修改和变换数据的 Duplex 流 (例如 zlib.createDeflate()).
查看全部 -
Buffer的实例方法还有:
pollsize:大小;
isBuffer:判断是否为buffer类型;
compare:判断相对位置;
isEncoding:是否支持某种编码;
concat:连接创建为新的buffer对象;
byteLength:获得指定编码下的字符串所占的字节数。
查看全部 -
let http = require('https');
let baseUrl = 'https://www.imooc.com/learn/';
let learnNumber_baseUrl = 'https://www.imooc.com/course/AjaxCourseMembers?ids=';
let cheerio = require('cheerio');
let videosId = [728,637,348,259,197,134,75];
function filerChapters(pageData){
let html = pageData.html;
let $ = cheerio.load(html);
let chapters = $('.chapter');
let courseData = {
title:$('.hd h2').text(),
number:pageData.number,
id:$('.person-num').attr('href').split('/')[2],
videos:[]
};
chapters.each(function(item){
let chapter = $(this);
let chapterTitle = chapter.find('h3').text();
let videos = chapter.find('.video').children('li');
let chapterData = {
chapterTitle:chapterTitle,
videos:[]
};
videos.each(function(item){
let video = $(this).find('.J-media-item');
let videoTitle = video.text().trim();
let id = video.attr('href').split('video/')[1];
let videoData = {
title:videoTitle,
id:id
};
chapterData.videos.push(videoData);
});
courseData.videos.push(chapterData);
});
return courseData;
}
function printCourseData(coursesData){
coursesData.forEach(function(courseData){
console.log('\n');
console.log(' ######### '+courseData.title + ' [学习人数:' + courseData.number + '] #########\n');
courseData.videos.forEach(function(item){
let chapterTitle = item.chapterTitle;
console.log(chapterTitle );
item.videos.forEach(function(video){
console.log(' [' + video.id+ ']' + video.title.trim().split('(')[0]);
});
});
});
}
function getPageAsync(url){
return new Promise(function(resolve, reject){
http.get(url,function(res){
let html = '';
res.on('data',function(data){
html += data;
});
res.on('end',function(){
resolve(html);
});
}).on('error',function(){
console.log('error');
});
});
}
function getLearnDataAsync(html){
return new Promise(function(resolve,reject){
let $ = cheerio.load(html);
let id = $('.person-num').attr('href').split('/')[2];
let pageData = {
html:html,
number:0
};
let db = '';
http.get(learnNumber_baseUrl+id,function(res){
res.on('data',function(data){
db += data;
db = JSON.parse(db);
pageData.number = parseInt(db.data[0].numbers,10);
});
res.on('end',function(){
resolve(pageData);
});
}).on('error',function(){
console.log('error');
});
});
}
let promiseList = [];
// let coursesDataPromises = [];
videosId.forEach(function(id){
promiseList.push(getPageAsync(baseUrl+id).then(function(html){
return getLearnDataAsync(html);
}));
});
Promise
.all(promiseList)
.then(function(pagesData){
let coursesData = [];
pagesData.forEach(function(pageData){
coursesData.push(filerChapters(pageData));
});
printCourseData(coursesData);
});
查看全部 -
(一)Promise 1. ES6的Promise语言标准 2. Promise/A+规范 (二)Promise使用场景 1. 是一种异步的实践方案 2. 特别是Callback Hell, 可以用同步的方式写异步代码 (三) Promise的三种状态 1. pending 未完成 2. fulfilled 已完成 3. rejected 失败 (1->2, 1->3 正确) (2->1, 3->1, 2->3 错误) 总结: 只能又未完成变为已完成或失败, 且不可逆, 改变只能一次, 不存在即已完成同时失败
查看全部 -
说一下我的理解,Promise没有把异步变同步,只是以同步的方式来写异步,使用promise,当代码执行到resolve时跳到下一步的then方法中依次执行,执行到reject时跳到catch方法依次执行;上一步then方法中返回的值可以是一个新的Promise也可以是某一固定值,为新的Promise时会根据其resolve和reject来进行下一步的代码执行,当为固定值时会把该值传给下一步的then方法参数使用。
Ajax解决的是网页异步刷新问题,完全可以在Promise中嵌套使用ajax。查看全部
举报