相信很多人刚接触promise都会晕,但学会后却离不开它,本文详细介绍一下promise,promise解决的问题,帮助新手快速上手 [扫盲] 什么是promise? promise是一种约定,并非一种技术,像设计模式一样,跟语言无关.框架无关.js里面实现promise的框架有很多,如:Q.jQuery等. promise有什么用? 它主要是为了解决js异步回调时业务太乱,尤其嵌套异步时,代码也很丑,维护性也差,错误处理也不能统一这些问题.因此目前也只有js语言会使用promise [案例]…
手写一款符合Promise/A+规范的Promise 长篇预警!有点长,可以选择性观看.如果对Promise源码不是很清楚,还是推荐从头看,相信你认真从头看到尾,并且去实际操作了,肯定会有收获的.主要是代码部分有点多,不过好多都是重复的,不必担心 Promise的一些用法在此不多赘述,本篇主要带领你手写一个Promise源码,学完你就会发现:Promise没有你想象中的那么难 本篇大概分为以下步骤 实现简单的同步Promise 增加异步功能 增加链式调用then 增加catch finally方…
2015年6月,ES2015(即ES6)正式发布后受到了非常多的关注.其中很重要的一点是 Promise 被列为了正式规范. 在此之前很多库都对异步编程/回调地狱实现了类 Promise 的应对方案,比如 bluebird.Angular 的 Q 和大名鼎鼎的 jQuery 的 deffered 等. 为了便于理解,本文将分为三个部分,每个部分实现 Promise 的一部分特性,最终一步一步的实现一个完整的.遵循 promise A+ 规范的 Promise. Promise A+规范规定,Pr…
1.定义整体结构(不写实现) 定义一个自己的promise的库 lib(库的简写) 一个js文件.一个js模块(不能用es6  也不能commjs)(用es5模块语法 ) 匿名函数自调用.IIFE (function (window) { function Promise(excutor) { } //成功失败时候调用的回调函数,返回一个新的promise对象 Promise.prototype.then = function(onResoled, onRejected) {} Promise.…
为什么要用promise 1.使用纯回调函数 先指定回调函数,再启动异步任务 答 1.指定回调函数的方式更加灵活 可以在执行任务前,中,后 2.支持链式调用,解决回调地狱问题 什么是回调地狱:回调函数嵌套使用,下一层回调函数依赖上一层回调函数的结果 解决方案.promise链式 终极解决方案 async/await async function request() { try { const result = await dosongthing() const newResult = await…
Promise.resolve( data)与Promise.reject( data ) 常用来生成已经决议失败或成功的promise实例: 1.Promise.reject(data)不管传递的是什么值,只要决议为失败,后面就不会进行任何处理,而是执行then里的reject方法,使用前面的data值进行处理: 2.Promise.resolve(data)传递的值有以下几种:[Promise.resolve(data)不管传入的值是什么类型,都会进行包装,使返回结果是promise实例]…
一.构建流程 1.(异步)数据源(请求)的构建:Promise的构建并执行请求: 2.处理流程的构建:then将处理函数保存: 二.处理: 1.请求的响应返回: 2.调用后继处理流程. 三. 1.构建源promise的同时发起了异步请求: 2.构建后继处理流程是在一瞬间完成的: 声明式编程语言: 处理流程的构建由程序员负责:声明式: 处理流程的执行由底层解释程序复杂:命令式: https://www.cnblogs.com/feng9exe/p/8950109.html https://www.…
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(data…
疑问:感觉会报错,因为执行到defer.promise.then这时候还没到defer.resolve,因为异步读文件,总归会慢 解答:先执行defer.promise.then,是给callback赋值,函数的赋值会比较抽象,callback得到函数的赋值后,是函数就该等待执行,等待resolve的时候,执行,其实也是回调的方式, 关键点:实参是函数,就是形参被复值成函数,把形参当函数看 var Defer = function(){ var value,callback; return {…
const PENDING = "pending"; const RESOLVED = "resolved"; const REJECTED = "rejected"; function MyPromise(fn){ const that = this; that.state = PENDING; that.value = null; that.resolvedCallbacks = []; that.rejectedCallbacks = []…