Promise个人笔记---【Promise的前世今生】
Promise第一版本
案例是使用Node.js内置的fs模块[就是文件系统模块,负责读写文件。]来模拟异步操作
const fs = require('fs');
function getFilePath(fpath) {
let p = new Promise(function (resolve, reject) {
fs.readFile(fpath, 'utf-8', (err, dataStr) => {
if (err) return reject(err)
resolve(dataStr)
})
});
return p
}
let p = getFilePath('./src/main.js');
p.then(
function (data) {
console.log('-----------------' +data + '---------------')
},
function (err) {
console.log(err.message)
})
Promise 第二版本
const fs = require('fs');
function getFilePath(fpath) {
return new Promise(
function (resolve, reject) {
fs.readFile(fpath, 'utf-8', (err, dataStr) => {
if (err) return reject(err)
resolve(dataStr)
})
}
)
}
getFilePath('./src/main.js')
.then(
function (data) {
console.log('-----------------' + data + '---------------')
},
function (err) {
console.log(err.message)
}
)
新的需求: 依次读取 1.txt --> 2.txt --> 3.txt
第一版
const fs = require('fs');
function getFilePath(fpath) {
return new Promise(
function (resolve, reject) {
fs.readFile(fpath, 'utf-8', (err, dataStr) => {
if (err) return reject(err)
resolve(dataStr)
})
}
)
}
getFilePath('./1.txt')
.then(function (data) {
console.log('-----------------' + data + '---------------')
getFilePath('./2.txt')
.then(function (data) {
console.log('-----------------' + data + '---------------')
getFilePath('./3.txt')
.then(function (data) {
console.log('-----------------' + data + '---------------')
})
})
})
第二版
const fs = require('fs');
function getFilePath(fpath) {
return new Promise(
function (resolve, reject) {
fs.readFile(fpath, 'utf-8', (err, dataStr) => {
if (err) return reject(err)
resolve(dataStr)
})
}
)
}
getFilePath('./1.txt')
.then(
function (data) {
console.log('-----------------' + data + '---------------')
return getFilePath('./2.txt')
})
.then(
function (data) {
console.log('-----------------' + data + '---------------')
return getFilePath('./3.txt')
})
.then(
function (data) {
console.log('-----------------' + data + '---------------')
})
新需求 捕获过程中的错误 不影响后面的Promise正常执行
const fs = require('fs');
function getFilePath(fpath) {
return new Promise(
function (resolve, reject) {
fs.readFile(fpath, 'utf-8', (err, dataStr) => {
if (err) return reject(err);
resolve(dataStr)
})
}
)
}
getFilePath('./没有这个文件.txt')
.then(
function (data) {
console.log('-----------------' + data + '---------------')
return getFilePath('./2.txt')
}, function (err) {
console.log(err.message)
return getFilePath('./2.txt')
})
.then(
function (data) {
console.log('-----------------' + data + '---------------')
return getFilePath('./3.txt')
})
.then(
function (data) {
console.log('-----------------' + data + '---------------')
})
新需求 后面的执行以来前面的结果,当前面失败立即终止,并捕获错误
const fs = require('fs');
function getFilePath(fpath) {
return new Promise(
function (resolve, reject) {
fs.readFile(fpath, 'utf-8', (err, dataStr) => {
if (err) return reject(err);
resolve(dataStr)
})
}
)
}
getFilePath('./1.txt')
.then(
function (data) {
console.log('-----------------' + data + '---------------')
return getFilePath('./2.txt')
})
.then(
function (data) {
console.log('-----------------' + data + '---------------')
return getFilePath('./22.txt')
})
.then(
function (data) {
console.log('-----------------' + data + '---------------')
return getFilePath('./3.txt')
})
.catch(function (err) {
console.log('【自己】捕获到的错误'+ err.message)
})
上面那样写不太优雅,来个终极版
const fs = require('fs');
function getFilePath(fpath) {
return new Promise(
function (resolve, reject) {
fs.readFile(fpath, 'utf-8', (err, dataStr) => {
if (err) return reject(err);
resolve(dataStr)
})
}
)
}
Promise.all([getFilePath('./1.txt'), getFilePath('./不存在.txt'), getFilePath('./1.txt')])
.then(datas => {
console.log(datas);
})
.catch(err => {
console.log(err)
})
小结:
- Vue中的vue-resource(官方已经不推荐使用)和axios都是基于Promise的,完全继承了Promise的特性,看过文档后分分钟可以上手
- axios中的http请求实现不需要在自己写逻辑了 ,直接调用它的api就可以
Promise个人笔记---【Promise的前世今生】的更多相关文章
- es6学习笔记--promise对象
Promise对象是为了简化异步编程.解决回调地狱情况 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可 ...
- js的Promise学习笔记(1)
1: 何为Promise Promise是抽象异步处理对象以及对其对象进行各种操作的组件,是基于并列/并行处理设计的一种编程语言. 说到基于JavaScript的异步处理,大多数都会想到利用回调函数. ...
- Promise 学习笔记
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise是一个对象,从它可以获取异步操作的消息.Promise提供统一的API, ...
- JavaScript之Promise学习笔记
一直想知道Promise到底是怎么实现的,网上一搜几十篇文章,看的一脸蒙蔽.最后算是找到几个讲的真心很详细明了的.看了一份源码看了很久很久……最后找大佬问了几处看不懂的地方,大佬只看了十几分钟就看懂了 ...
- js-ES6学习笔记-Promise对象(2)
1.Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的.它的作用是为Promise实例添加状态改变时的回调函数. 2.Promise.pr ...
- 《深入理解ES6》笔记—— Promise与异步编程(11)
为什么要异步编程 我们在写前端代码时,经常会对dom做事件处理操作,比如点击.激活焦点.失去焦点等:再比如我们用ajax请求数据,使用回调函数获取返回值.这些都属于异步编程. 也许你已经大概知道Jav ...
- ES6-11学习笔记--Promise
Promise是ES6异步编程解决方案之一,简化以前ajax的嵌套地狱,增加代码可读性. 基本用法: resolve,成功 reject,失败 let p = new Promise((resol ...
- Promise原理讲解 && 实现一个Promise对象 (遵循Promise/A+规范)
1.什么是Promise? Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 2.对于几种常见异步编程方案 回调函数 事件监听 发布/ ...
- 理解Promise.all,Promise.all与Promise.race的区别,如何让Promise.all在rejected失败后依然返回resolved成功结果
壹 ❀ 引 我在 es6入门4--promise详解 这篇文章中有详细介绍Promise对象的用法,文章主题更偏向于对于Promise概念的理解与各方法基本使用介绍:而世上一个比较有趣的问题就是,即 ...
- ES6---new Promise()讲解,Promise对象是用来干嘛的?
ES6---new Promise()讲解,Promise对象是用来干嘛的? :https://blog.csdn.net/Wbiokr/article/details/79490390
随机推荐
- M(必备),R(需求),C(条件),O(可选)
M:must 必备 R:request 需求 C:condition 条件 O:option 可选 AFL:application file locator 应用文件定位器 PKI:公钥索引 IPK: ...
- Requests接口测试(一)
接口测试概念 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关 ...
- Unity破解不成功解决方案
你是不是遇到过Unity新版本出来的时候就急着使用,但是安装好了,却破解不成功的问题(你之前的版本破解过).这是由于你的注册表没有彻底的删除,接下来我们图解如何清理. 1.卸载以前的版本,卸载完了删除 ...
- 分组背包----HDU1712 ACboy needs your help
很简单的一道分组背包入门问题.不多解释了. #include <iostream> #include <cstdio> #include <cstring> usi ...
- delphi 取json中数组的值(ISuperArray)
{ "action": "******", "data": [ { "Info1": { "ID": ...
- 新的云主机 python 创建虚拟环境
1.为什么要搭建虚拟环境? 问题:如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无 ...
- RealSense R400系列深度相机的图像获取保存和格式转换
关于RealSense的基础使用的博文用的库有点混杂,挺多博文都是早期maneger的那个库,对那个不是很了解,主要记录一下使用最新的函数库的基础使用. 相机型号:RealSense R435 使用函 ...
- mysql 时间戳转换为日期
from_unixtime(time); from_unixtime(time,'%Y%m%d'); from_unixtime(time,'%Y年%m月%d日');
- 强制所有网页链接在同一页面打开或者在TabControl中弹出新窗口
IEwebbrowser中老生常谈的话题. 一般的解决都是通过 // webBrowser.Navigating += WebBrowser_Navigating; 注册转跳前事件 private v ...
- 1221: Fibonacci数列 [数学]
1221: Fibonacci数列 [数学] 时间限制: 1 Sec 内存限制: 128 MB 提交: 116 解决: 36 统计 题目描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn- ...