首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【javascript】异步编年史,“纯”到Promise

, 这就是对于竞态处理 正因为调给我们带来麻烦很多,ES6引入了Promise机制: 一步一步地揭开Promise神秘面纱 首先让我们回顾一下“函数”给我们带来信任危机原因: 我们无法信任放入参数函数...当new 一个Promise对象时候, 我们能接收到两个方法参数: resolve和reject, 当调用 resolve方法时候,会把Promise对象状态Pending变为Fulfilled...Rejected 而且Promise成功时候(调用resolve), resolve返回参数可以被第一个接收到, 如上面的value参数 而当Promise失败时候(调用reject), reject...时候,即使这个 Promise是立即resolve函数(即Promise内部没有ajax等异步操作,只有同步操作), 提供给then(..) 也是会被异步调用,这帮助我们省了不少心 2....调调用次数过多 Promise 内部机制决定了调用单个Promisethen方法, 只会被执行一次,因为Promise状态变化是单向不可逆,当这个Promise第一次调用resolve方法

1.1K80
您找到你想要的搜索结果了吗?
是的
没有找到

深入了解Promise对象,写出优雅代码,告别地狱

实际应用 结束语 引言 我们都知道,一个好代码是有很强维护性、阅读性, 但是在Jacascript中函数量一增多, 很容易影响代码阅读性,导致代码难以维护, 这种现象就叫做回地狱, 为了解决这现象..., ES6将Promise写进了语言标准里, 专门用来解决这个地狱现象, 那么就让我们来了解一下吧。...时,函数数量很多时候代码,以及使用Promise以后代码吧。..., 这区别已经很明显了吧, 显而易见,使用完Promise后, 这种函数里面嵌套函数代码就变得很简洁,耐看,那我们就开始学习Promise使用吧 二、Promise三种状态 pending...: 等待状态,比如正在网络请求, 或定时器没有到时间 fulfill: 满足状态,当我们主动调了resolve时,就处于该状态,并且会then函数 reject: 拒绝状态,当我们主动调了reject

53610

JavaScript 中Promise 和 AsyncAwait 代码案例

本文将通过代码示例展示如何使用基于 API,然后将其改成使用 Promises,最后再用 Async/Await 语法。本文不会详细解释promise 和 Async/Await 语法。...有关这些概念详细解释,请查看 MDN Asynchronous JavaScript[1],它解释了什么是异步性以及如何用回promise 和 Async/Await 语法处理异步 JavaScript...出于演示目的,我们将使用 fs.readFile[2],这是一个基于用于读取文件 API。...使用回 首先创建一个目录,里面包含我们代码文件和要进行读取操作文件。...node script.js 命令执行脚本,会在终端上输出“Beam me up, Scotty”: $ node script.js Beam me up, Scotty [callback] 对于写法

1.4K20

小程序不同页面的异步,callback和promise使用讲解

比如我们在app.js里请求位置,获取用户信息。然后在首页index.js里要使用这些数据,那么我们这么写就有问题了。下面就来教大家两种方式来很好解决这个问题。 一,通过callback。...我们上图callback参数,其实就是下图 function(result){} ? 把function方法作为一个参数传递进去目的,就是为了下面的。 ?...1、new 一个Promise对象 2、请求数据异步代码写在promise函数中 3、promise接受两个参数,一个resolve(已成功success),一个reject(已失败fail) 4、...promise有三种状态pendding(进行中,当new了promise就是pendding状态)、fulfilled(已成功)、rejected(已失败),当成功时候调用resolve将状态改为已成功...好了,到这里我们两种不同页面的异步就给大家讲完了。

1.4K32

传统函数与 ES6中promise以及 ES7 asyncawait终极异步同步化

目录 传统函数封装 ES6中promise 异步同步化(终极) ---- 传统函数封装 js中函数理解:函数就是传递一个参数化函数,就是将这个函数作为一个参数传到另外一个主函数里面...传统js函数我们可以用callback方式来实现 举例:  我们用vue2写法先获取到http://ku.qingnian8.com/dataApi/news/navlist.php 注意:这个后端接口时哔哩哔哩咸虾米老师后端接口...我们可以通过这样一种传统函数callback方式来将我们自定义获取后端接口api方法进行封装!...第一种链式写法,使用catch,相当于给前面一个then方法返回promise 注册,可以捕获到前面then没有被处理异常。第二种是函数写法,仅为为上一个promise 注册异常回。...如果是then第一个参数函数 resolve 中抛出了异常,即成功函数出现异常后,then第二个参数reject 捕获捕获不到,catch方法可以捕获到。

1K20

【JS】302- 地狱解决方案之Promise

,成功结果调回来向下执行 }) 上述代码只是一层级,如果代码复杂后,会出现多层级,代码可读性也会很差,那有没有一种方式,不用考虑里面的内容,直接根据结果成功还是失败执行下面的代码呢?...Promise含义 书上这么说: Promise 是异步编程一种解决方案,比传统解决方案–函数和事件--更合理和更强大。...语法上说,Promise是一个对象,它可以获取异步操作消息。...==Promise其实没有做任何实质代码操作,它只是对异步操作函数不同结果定义了不同状态。...这种情况,代码虽然看起来会比callback简介和规范了很多,但是还是感觉一些复杂,有没有更好解决办法呢?请看下一篇博客 终极使用--async和await讲解

1.3K30

地狱解决方案之Promise

,成功结果调回来向下执行 }) 上述代码只是一层级,如果代码复杂后,会出现多层级,代码可读性也会很差,那有没有一种方式,不用考虑里面的内容,直接根据结果成功还是失败执行下面的代码呢?...Promise含义 书上这么说: Promise 是异步编程一种解决方案,比传统解决方案–函数和事件--更合理和更强大。...语法上说,Promise是一个对象,它可以获取异步操作消息。...==Promise其实没有做任何实质代码操作,它只是对异步操作函数不同结果定义了不同状态。...这种情况,代码虽然看起来会比callback简介和规范了很多,但是还是感觉一些复杂,有没有更好解决办法呢?请看下一篇博客 终极使用--async和await讲解

73820

地狱解决方案之Promise

,成功结果调回来向下执行 }) 上述代码只是一层级,如果代码复杂后,会出现多层级,代码可读性也会很差,那有没有一种方式,不用考虑里面的内容,直接根据结果成功还是失败执行下面的代码呢?...Promise含义 书上这么说: Promise 是异步编程一种解决方案,比传统解决方案–函数和事件--更合理和更强大。...语法上说,Promise是一个对象,它可以获取异步操作消息。...我理解: Promise使函数可以规范链式调用 Promise原理与讲解 原理 Promise三种状态 pending:进行中 fulfilled :执行成功 rejected :执行失败...==Promise其实没有做任何实质代码操作,它只是对异步操作函数不同结果定义了不同状态。

1.3K30

ES6 系列之我们来聊聊 Promise

说起 Promise,我们一般都会或者回地狱说起,那么使用回调到底会导致哪些不好地方呢? 1....可是异步函数并非如此,比如执行 fs.readdir 时候,其实是将回函数加入任务队列中,代码继续执行,直至主线程完成后,才会任务队列中选择已经完成任务,并将其加入栈中,此时栈中只有这一个执行上下文...,如果报错,也无法获取调用该异步操作时栈中信息,不容易判定哪里出现了错误。...此外外层变量,也可能被其它同一作用域函数访问并且修改,容易造成误操作。 之所以单独讲讲地狱,其实是想说嵌套和缩进只是地狱一个梗而已,它导致问题远非嵌套导致可读性降低而已。...控制反转再反转 前面我们讲到使用第三方 API 时候,可能会遇到如下问题: 函数执行多次 函数没有执行 函数有时同步执行有时异步执行 对于第一个问题,Promise 只能 resolve

61430

ES6新增语法(五)——Promise详解

Promise介绍 promise是一个对象,它可以获取异步操作消息。有all、race、reject、resolve这几个方法,原型上有then、catch等方法。...Promise两个特点: 对象状态不受外界影响。Promise对象获取是异步操作,有三种状态:pending(进行中)、fulfilled(已成功)、reject(已失败)。...",reason) }) then方法 then方法接收两个参数作为参数,第一个参数是Promise执行成功时,第二个参数是Promise执行失败,两个函数只会有一个被调用。...Promise优点 指定函数方式更加灵活。 支持链式调用,可以解决地狱问题。地狱就是函数嵌套调用,外部函数异步执行结果是嵌套函数执行条件。...地狱缺点是不便于阅读和异常处理。 Promise缺点 无法取消Promise,一旦新建就会立即执行,无法暂停和取消。 如果不设置函数,Promise内部抛出错误,不会反应到外部。

40110

ES6新增语法(五)——Promise详解

Promise介绍 promise是一个对象,它可以获取异步操作消息。有all、race、reject、resolve这几个方法,原型上有then、catch等方法。...Promise两个特点: 对象状态不受外界影响。Promise对象获取是异步操作,有三种状态:pending(进行中)、fulfilled(已成功)、reject(已失败)。...",reason) }) then方法 then方法接收两个参数作为参数,第一个参数是Promise执行成功时,第二个参数是Promise执行失败,两个函数只会有一个被调用。...Promise优点 指定函数方式更加灵活。 支持链式调用,可以解决地狱问题。地狱就是函数嵌套调用,外部函数异步执行结果是嵌套函数执行条件。...地狱缺点是不便于阅读和异常处理。 Promise缺点 无法取消Promise,一旦新建就会立即执行,无法暂停和取消。 如果不设置函数,Promise内部抛出错误,不会反应到外部。

41030

前端面试官问Promise,怎样回答拿高分

1.Promise是什么? Promise 是异步编程一种解决方案,比传统解决方案——函数和事件——更合理和更强大。...所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束事件(通常是一个异步操作)结果。语法上说,Promise 是一个对象,它可以获取异步操作消息。...1.地狱问题 2.代码可读性问题 3.信任问题 什么是地狱 所谓地狱就是指把函数作为参数层层嵌套请求,这样层层嵌套,人们称之为地狱,代码阅读性非常差。...,使用了大量函数,来获取将来异步执行成功之后数据。...Promise成功之后仅调用一次resolve(),不会产生多次执行问题。除非Promise再次调用。

11310

按照 PromiseA+ 手写Promise,通过promises-aplus-tests全部872个测试用例

保存完成 this.onRejectedCallbacks = []; // 保存拒绝 // ... } 复制代码 2.3 定义 resolve 方法 function Promise...因为promise只能决议一次,所以,保存也正好只能执行一次) * 2.2.6.1 所有的onFulfilled,必须按照注册顺序执行 */ promise.onFulfilledCallbacks.forEach...* (决议之后,立即执行保存。...Promise.prototype.then 为什么把 then 单独原型方法中拎出来,主要还是因为他是除了 Promise 决议逻辑之外另一个重难点,所以想单独讲解。...如果函数执行出错,将以抛出错误,拒绝新promise; // 2. 否则,新返回promise会沿用旧promise决议值进行决议。

92130

深入理解nodejs中异步编程

上篇文章我们讲到setTimeout和setInterval实际上都是异步函数。 函数错误处理 在nodejs中怎么处理错误信息呢?...console.log(data) }) 地狱 javascript虽然非常优秀,它有效解决了同步处理问题。...但是遗憾是,如果我们需要依赖函数返回值来进行下一步操作时候,就会陷入这个地狱。 叫回地狱有点夸张了,但是也是从一方面反映了函数所存在问题。...所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束事件(通常是一个异步操作)结果。 语法上说,Promise 是一个对象,它可以获取异步操作消息。...Promise对象状态改变,只有两种可能:Pending变为Resolved和Pending变为Rejected。

1.3K30

前端学习笔记 – promise是什么?能解决什么问题?

promise是异步编程一种解决方案: 语法上讲,promise是一个对象,它可以获取异步操作消息; 本意上讲,它是承诺,承诺它过一段时间会给你一个结果。...一般来说我们会碰到嵌套都不会很多,一般就一到两级,但是某些情况下,嵌套很多时,代码就会非常繁琐,会给我们编程带来很多麻烦,这种情况俗称地狱。...promise是用来解决两个问题: 1、地狱,代码难以维护,常常第一个函数输出是第二个函数输入这种现象 2、promise可以支持多个并发请求,获取并发请求中数据...: resolve:异步操作执行成功后函数 reject:异步操作执行失败后函数 2、then链式操作用法 p.then((...,第二个对应reject,所以我们能够分别拿到他们传过来数据。

39140

深入理解nodejs中异步编程

上篇文章我们讲到setTimeout和setInterval实际上都是异步函数。 函数错误处理 在nodejs中怎么处理错误信息呢?...但是遗憾是,如果我们需要依赖函数返回值来进行下一步操作时候,就会陷入这个地狱。 叫回地狱有点夸张了,但是也是从一方面反映了函数所存在问题。...ES6中Promise 什么是Promise Promise 是异步编程一种解决方案,比传统解决方案“函数和事件”更合理和更强大。...所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束事件(通常是一个异步操作)结果。 语法上说,Promise 是一个对象,它可以获取异步操作消息。...Promise对象状态改变,只有两种可能:Pending变为Resolved和Pending变为Rejected。

1.3K21
领券