博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10慕课网《进击Node.js基础(一)》初识promise
阅读量:4328 次
发布时间:2019-06-06

本文共 3879 字,大约阅读时间需要 12 分钟。

首先用最简单的方式实现一个动画效果

Promise animation    

 使用promise实现相同功能

Promise animation    

 

promise对象三种状态:

  • -未完成(pending)
  • -已完成(fulfiled)
  • -失败(rejected)

 promiseA与promiseA+不同点:

  • -A+规范通过属于thenable来区分promise对象
  • -A+定义onFulfilled/onRejected必须是作为函数来调用,而且调用过程必须是异步的
  • -A+严格定义了then方法链式调用时onFulfilled/onRejected的调用顺序

 promise then 方法

将异步执行的回调函数放入then方法中,规范链式书写

promiseObj.then(onFunction, onRejected)onFulfilled = function(value){  return promiseObj2        }onRejected = function(err){}

 

 promise库有很多

  • bluebird
  • Q
  • then.js
  • es6-promise
  • ypromise
  • async
  • native-promise-only

 使用promise重写爬虫

对比:

 

var http = require('http')var Promise = require('bluebird')var cheerio =  require('cheerio') //使用模块var baseUrl = 'http://www.imooc.com/learn/'var videoIds = [728,637,348]function filterChapters(html){    //可以像jQuery一样使用    var $ = cheerio.load(html)    var chapters = $('.chapter')    var title = $('.clearfix h2').text()    var number = $('.js-learn-num').text()    // courseData = {
// title : title, // number : 0, // videos : [{
// chapterTitle:'', // videos:[{
// title:'', // id:'' // }] // } var courseData = { title : title, number : number, videos : [] } chapters.each(function(item){ var chapter = $(this) var chapterTitle = chapter.find('h3').text() var videos = chapter.find('.video').children('li') var chapterData = { chapterTitle :chapterTitle.trim(), videos:[] } videos.each(function(item){ var video = $(this).find('a') var videoTile = video.text() var id = video.attr('href').split('video/')[1] chapterData.videos.push({ title: videoTile.trim(), id : id }) }) courseData.videos.push(chapterData) }) return courseData}function printCourseInfo(coursesData){ coursesData.forEach(function(courseData){ console.log(courseData.number + ' 人学过 ' + courseData.title + '\n') }) coursesData.forEach(function(courseData){ console.log('###' + courseData.title + '\n') courseData.videos.forEach(function(item){ var chapterTitle = item.chapterTitle item.videos.forEach(function(video){ console.log(' 【' + video.id + '】' + video.title + '\n') }) }) })}function getPageAsync(url){ return new Promise(function(resolve,reject){ console.log('正则爬取'+ url) http.get(url,function(res){ var html = '' res.on('data',function(data){ html += data }) res.on('end',function(){ resolve(html) //var courseData = filterChapters(html) //printCourseInfo(courseData) }) }).on('errer',function(e){ reject(e) //console.log('出错') }) })}var fetchCourseArray = []videoIds.forEach(function(id){ fetchCourseArray.push(getPageAsync(baseUrl + id)) })Promise .all(fetchCourseArray) .then(function(pages){ //对多个数据处理 var coursesData = [] pages.forEach(function(html){ var curses = filterChapters(html) coursesData.push(curses) }) coursesData.sort(function(a,b){ return a.number < b.number }) printCourseInfo(coursesData) })

 

 

HTTP和HTTPS

HTTPS在http的基础上进行了加密

运行HTTPS服务,.pem文件还需要另外的方式创建

var https = require('https')var fs = require('fs')var options = {    key: fs.readFileSync('ssh_key.pem'),//ssl 文件    key: fs.readFileSync('ssh_cert.pem'),//证书文件}//运行HTTPS服务器https.createServer(options, function(req,res){    res.writeHead(200)    res.end('hello world'+ req)}).listen(8090)

 

转载于:https://www.cnblogs.com/-beauTiFul/p/9195868.html

你可能感兴趣的文章
小D课堂 - 新版本微服务springcloud+Docker教程_2_02 微服务核心基础讲解
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-01 什么是微服务的注册中心
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-07 Eureka服务注册中心配置控制台问题处理...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-02 微服务调用方式之ribbon实战 订单调用商品服务...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-06 Feign核心源码解读和服务调用方式ribbon和Feign选择...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-01分布式核心知识之熔断、降级
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-04 feign结合hystrix断路器开发实战下...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_6-01 微服务网关介绍和使用场景
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_5-05熔断降级服务异常报警通知
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
查看>>