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

JS 异步系列 —— Promise 札记

Promise; 要了解其它更为高级的异步操作得先熟悉 Promise; 基于这些目的,实践了一个符合 Promise/A+ 规范的 repromise。...本札记系列总共三篇文章,作为之前的文章 Node.js 异步异闻录 的拆分和矫正。...Promise札记 Generator札记 Async札记 Promise/A+ 核心 在实现一个符合 Promise/A+ 规范的 promise 之前,先了解下 Promise/A+ 核心,想更全面地了解可以阅读...// 以下 demo,请求两个 url,当两个异步请求返还结果后,再请求第三个 url const p1 = request(`http://some.url.1`) const p2 = request...// 能捕获前面链式调用的错误(包括 catch 中),可以传两个参数也可不传 实践过程总结 坑点 1:事件循环 事件循环:同步队列执行完后,在指定时间后再执行异步队列的内容

1.1K30

JS异步执行,Promise用法

Promise Promise异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大。...实例 var promise = new Promise(function(resolve, reject){ // ... some code if (/* 异步操作成功 */) {...resolve作用是将Promise对象状态由“未完成”变为“成功”,也就是Pending -> Fulfilled,在异步操作成功时调用,并将异步操作的结果作为参数传递出去;而reject函数则是将Promise...对象状态由“未完成”变为“失败”,也就是Pending -> Rejected,在异步操作失败时调用,并将异步操作的结果作为参数传递出去。...async函数对 Generator 函数的改进,async 函数必定返回 Promise,我们把所有返回 Promise 的函数都可以认为是异步函数。

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

函数式编程与JS异步编程、手写Promise

一、谈谈你是如何理解JS异步编程的,EventLoop、消息队列都是做什么的,什么是宏任务,什么是微任务? ? 1. 异步编程:回调函数、事件监听、发布/订阅、Promises对象 2....消息队列是一个事件的队列(也可以理解成消息的队列),IO设备完成一项任务,就在"任务队列"中添加一个事件,表示相关的异步任务可以进入"执行栈"了。 3....宏任务 Macrotasks 就是参与了事件循环的异步任务;微任务 Microtasks 就是没有参与事件循环的“异步”任务。...代码题 一、将下面异步代码使用Promise的方式改进 setTimeout(function () { var a = "111" setTimeout(function () {..._underscore, toLower) console.log(sanitizeNames(["Hello World"])); 三、基于下面提供的代码,完成后续四个练习 // support.js

97610

Promise 异步编程

一 什么是Promise呢? 中 非常重要,好用, 是异步编程的一种解决方案....二 promise语法 promise采用的是链式编程,如图是一个简单的promise栗子 这里将业务进行一定的拆分了,我们在(resolve,reject)=>{},1000)里写了定时任务,真正处理的却是调用...三 Promise三种状态 当我们开发中有异步操作时, 就可以给异步操作包装一个Promise 异步操作之后会有三种状态 pending:等待状态,比如正在进行网络请求,或者定时器没有到时间。...的链式调用 我们在看Promise的流程图时,发现无论是then还是catch都可以返回一个Promise对象。...所以,我们的代码其实是可以进行链式调用的: 这里我们直接通过Promise包装了一下新的数据,将Promise对象返回了 Promise.resovle():将数据包装成Promise对象,并且在内部回调

31310

javascript异步promise

promise解决了哪些异步回调出现的问题。...) 回调函数调用过早 调用过早就是将异步函数作为同步处理了, 我们之前说过,javascript以单线程同步的方式执行主线程,遇到异步会将异步函数放入到任务队列中, 当主线程执行完毕,会循环执行任务队列中的函数...直接手动是promise的状态切为成功状态,console.log("我是异步执行的");这段代码也是异步执行的 提供给then()的回调永远都是异步执行的,所以promise中不会出现回调函数过早执行的情况...回调函数调用过晚或不被调用 回调函数调用过晚 回调函数调用过晚的处理原理和调用过早很类似, 在promise的then()中存放着异步函数,所有的异步都存在于js的任务队列中,当js的主线程执行完毕后...(`我是异步执行的成功:${res}`); },err=>{ console.log(`我是异步执行的失败:${err}`); }).catch(err => {

87940

javascript异步Promise.all()、Promise.race()、Promise.finally()

今天我们继续讨论promise 网络上关于PromiseAPI使用的文章多如牛毛,为了保持javascript异步系列文章的完整性,现在对promise的API进行简单全面的介绍 准备工作 我在easy-mock... <script...Promise.all就是用于将多个 Promise 实例,包装成一个新的 Promise 实例 Promise.all,接收一个数组作为参数,数组的每一项都返回Promise实例 我们重点看这段代码...三个promise实例参数之间是“与”的关系,全部成功,Promise.all就返回成功,有一个失败,Promise.all就返回失败 换个角度说,一个promise的执行结果依赖于另外几个promise...,用法和Promise.all类似,对应参数的要求和Promise.all相同,传入一个数组作为参数,参数要返回一个Promise实例 race就是竞争的意思,数组内的Promise实例,谁执行的快,就返回谁的执行结果

2.3K30

前端异步技术之Promise

前言 从事前端的朋友或多或少的接触过Promise,当代码中回调函数层级过多你就会发现Promise异步编程的魅力,相信此文一定能帮你排忧解惑!...Promise概念 PromiseJS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 或许是笔者理解能力有限,对官方术语怎么也感受不到亲切,下面我来用通俗易懂的语言解释下...: Promise是一个包含三种状态的对象(pending、fulfilled、rejected),可以链式的处理异步请求(then方法)并能很好地处理异常问题,是解决回调地狱的良好方案之一。...处理异步可读性可维护性以及代码美观度不言而喻 Promise API 'new' Promise //pending状态的promise var promise = new Promise(function...Promise polyfill & Test promise-polyfill.js 学习完Promise后,必定要重写Promise,后续遇到浏览器环境不支持也可有的放矢 代码如下 /** * @

48840

JS 手写: Promise

Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。 # 描述 一个 Promise 对象代表一个在这个 promise 被创建出来时不一定已知的值。...它让您能够把异步操作最终的成功返回值或者失败原因和相应的处理程序关联起来。...这样使得异步方法可以像同步方法那样返回值:异步方法并不会立即返回最终的值,而是会返回一个 promise,以便在未来某个时候把值交给使用者。...如果 promise 在一个相应的处理程序被绑定时就已经被兑现或被拒绝了,那么这个处理程序就会被调用,因此在完成异步操作和绑定处理方法之间不会存在竞争状态。...当异步任务顺利完成且返回结果值时,会调用 resolve 函数;而当异步任务失败且返回失败原因(通常是一个错误对象)时,会调用reject 函数。

1.4K40

使用 promise 重构 Android 异步代码

Promise 是 JavaScript 语言提供的一种标准化的异步管理方式,它的总体思想是,需要进行 io、等待或者其它异步操作的函数,不返回真实结果,而返回一个“承诺”,函数的调用方可以在合适的时机...Why:为什么要考虑引入Promise 前面说的Promise 不就是 JavaScript 异步编程的一种思想吗,那这跟 Android 开发有什么关系?...总结 本文提供一种异步编程的思路,借鉴了Promise思想来重构了Android的异步代码。通过Promise组件提供的多种并发模型能够更优雅的解决绝大部分的场景需求。...并发模型 ● 多任务并行请求 Promise.all():接受任意个Promise对象,并发执行异步任务。全部任务成功,有一个失败则视为整体失败。...Promise.allSettled(): 任务优先,所有任务必须执行完毕,永远不会进入失败状态。 Promise.any():接受任意个Promise对象,并发执行异步任务。

14820

异步编程解决方案 Promise

Promise 的使用 3. Promise 的状态 4. Promise 的结果 5. Promise 的 then 方法 6. Promise 的 catch 方法 7....回调地狱 ---- 回调地狱: 在回调函数中嵌套回调函数 因为 ajax 请求是异步的,所以想要使用上一次请求的结果作为请求参数,所以必须在上一次请求的回调函数中执行下次请求,这种写法非常繁琐,我们亲切的把它称之为...Promise 的使用 ---- Promise 是一个构造函数,接受一个函数作为参数,通过 new 关键字实例化 new Promise((resolve, reject) => { }); 查看 Promise...实例的属性 const promise = new Promise((resolve, reject) => { }); console.dir(promise); 得出 Promise 实例有两个属性...Promise 的结果 ---- Promise 实例的另外一个属性 result 的值就是调用 resolve() 或 reject() 的参数 const promise = new Promise

33230

JavaScript的异步编程之Promise

Promise 一种更优的异步编程统一 方法,如果直接使用传统的回调函数去完成复杂操作就会形成回调深渊 // 回调深渊 $.get('/url1'() => { $.get('/url2'() =...对象,这个方法会返回一个全新的Promise对象,与他们不同的是无论这些Promise执行是成功还是失败都是等这些Promise都完成了之后才会完成,当有多个彼此不依赖的异步任务成功完成时,或者总是想知道每个...// 5. promise3 // 6. settimeout 没想到吧,Promise异步时序执行有点特殊。...Promise的回调会作为微任务执行,会在本轮调用的末尾去执行,所以说上面代码会先打印promise1,promise2,promise3在打印settimeout 微任务是在后来才被引入到js中的,他的目的是为了提高整体的响应能力...,目前的绝大多数异步调用都是作为宏任务执行。

63570

JS高阶(一)Promise

抽象表达: Promise是ES6中新增的规范; Promisejs异步编程的新解决方案(旧方案采用函数回调); 具体表达: 从语法上说:Promise是一个构造函数; 从功能上说:Promise...对象用来封装一个异步操作并可获取其成功/失败的值; 为什么要使用Promise?...指定回调函数的方式更加灵活 旧:必须在启动异步任务前指定 promise:启动异步任务=>返回promise对象=>给promise对象绑定回调函数(甚至可以在异步任务结束后指定多个) 支持链式调用,...解决回调地狱问题 回调地狱:回调函数嵌套调用,外部回调函数异步执行的结果是嵌套回调执行的条件; 回调地域缺点:不便于阅读,不便于异常处理; 解决方案:promise链式调用; 5.2.1 对象状态改变...的 then() 返回一个新的 promise,可以展开 then() 的链式调用; 通过 then() 的链式调用可以串联多个 同步/异步 任务; //规避回调地狱 let p = new Promise

2.4K10

怎么理解JS Promise

的三种状态吗,只有异步操作的结果才可以决定当前promise的状态,因为promise 的意思为“承诺”,是比较严肃正经的,所以任何操作都不能改变当前promise的状态。...四、Promise异步 Promise异步的。js异步操作是通过js的事件循环机制EventLoop实现的。...这里引用以下文章所写的内容,这篇文章很详细的写了异步是什么 https://blog.csdn.net/li123128/article/details/80650256 当JS解析执行时,会被引擎分为两类任务...对于异步任务来说,当其可以被执行时,会被放到一个 任务队列(task queue) 里等待JS引擎去执行。...总结起来js引擎对程序的执行顺序是:1。先执行同步任务的程序 2。 在执行异步任务里的微任务 3。所有微任务都执行完了后就执行异步的宏任务,但这里是一个一个宏任务去执行,不是一下子执行完。

11.6K30
领券