# 静态方法 # Promise.all(iterable) (opens new window) 这个方法返回一个新的 promise 对象,该 promise 对象在 iterable 参数对象里所有的...# Promise.race(iterable) (opens new window) 当 iterable 参数里的任意一个子 promise 被成功或失败后,父 promise 马上也会用子 promise...的成功返回值或失败详情作为参数调用父 promise 绑定的相应句柄,并返回该 promise 对象。...# 创建 Promise Promise 对象是由关键字 new 及其构造函数来创建的。该构造函数会把一个叫做“处理器函数”(executor function)的函数作为它的参数。...中传入的参数会作为一个 reason 原封不动地往下传 Promise.reject = (reason) => { return new Promise((resolve, reject) =>
.1.promise基本用法 const promise =new Promise((resolve,reject)=>{...); }) console.log(4); 2.Promise基本用法补充 Promise的构造函数接收一个函数作为参数...Promise正是通过这两个状态来控制异步操作的结果。...在声明的时候,Promise构造函数传递的参数函数会立即执行,因此Promise使用的正确姿势是在其外层再包裹一层函数,使得构造函数中的函数按需执行,而不是立即执行。...如下: 3.使用promise来解决回调地狱的问题 服务端部分代码 //基于Promise处理ajax请求 function queryData(url){
抽象表达: Promise是ES6中新增的规范; Promise是js中异步编程的新解决方案(旧方案采用函数回调); 具体表达: 从语法上说:Promise是一个构造函数; 从功能上说:Promise...promise 对象; 说明:返回一个成功/失败的 promise 对象; //创建promise.resolve对象 //如果传入的对象为 非promise对象 则返回的是一个 成功的promise...对象 //如果传入的对象 非promise对象 则参数的结果决定了 resolve的结果 let p = Promise.resolve(); let p2 = Promise.resolve...非promise对象 则参数的结果决定了 resolve的结果 let p = Promise.reject(521); let c = Promise.reject(new Promise(...then 方法封装 实现 then 方法的回调 then(onResolved, onRejected){ const self = this; // 判断回调函数参数
就是new Promise 括号括着的函数叫做executor,resolve和reject函数是作为executor 的参数被传进去的,当然这两个参数是可选填的。....then()有两个参数:onFulfilled 和 onRejected ,这两个参数看英文也知道是什么意思,这两个参数也是函数,onFulfilled当然是Promise 实现的时候调用,onRejected...参数的值就是promise没有实现而调用reject()所返回的错误信息值在这个例子就是 err 。...四、Promise与异步 Promise是异步的。js异步操作是通过js的事件循环机制EventLoop实现的。...after");//同步任务 } testFn(); 上图结果证明了上述所说的js的执行顺序 。
图:使用Promise避免"回调地狱" 2. Promise特性回顾 注:本文适用于有Promise基础并希望深入挖掘Promise特性的读者;如果想学习Promise基础,下面这两本书不错; ?...扫码获取exam01.js ~ exam09.js源码 ? 3. 实现一版Promise试试!...Promise有很多社区规范,如 Promise/A、Promise/B、Promise/D 以及 Promise/A 的升级版 Promise/A+;Promise/A+ 是 ES6 Promises...注:_notify函数用作异步执行传入的函数数组以及参数;代码中将_callbacks、_errbacks传给_notify函数后立即清空,是为了保证_callbacks、_errbacks至多被执行一次...C.第3步:执行测试 npx promises-aplus-testsRookiePromiseTestAdapter.js > log.txt ? ----
本札记系列总共三篇文章,作为之前的文章 Node.js 异步异闻录 的拆分和矫正。...(thenable) // Promise {state: "resolved", data: 1, callbackQueue: Array(0)} /* 普通参数 */ Promise.resolve...(1) // Promise {state: "resolved", data: 1, callbackQueue: Array(0)} /* 不跟参数 */ Promise.resolve() //...(),Promise.reject() 原封不动地返回参数值 Promise.all(arr) 对于 Promise.all(arr) 来说,在参数数组中所有元素都变为决定态后,然后才返回新的 promise...Promise.race(arr) 来说,只要参数数组有一个元素变为决定态,便返回新的 promise。
return new Promise((resolve, reject)=> { // 假设此处是异步请求某个数据 $.ajax({ url: '......
1.then() 接受俩个俩个回调函数作为参数,第一个参数表示成功的时候去执行,第二参数表示失败的时候去执行,返回的时一个新的promise的实列。...3.all() 接受一个数组作为自己的参数,数组中每一项都是一个promise对象,当数组的每一个promise状态时resolved时,all方法的状态才会变成resolved,有一个变成rejected...4.race() 他和all方法一样,接受一个数组作为自己的参数,但是不同的时他时以第一完成的promise的状态来定义直接的状态,假设第一个状态时resolved,那么race方法的状态就是resolved...5finally() 他是不管promise时什么状态都会执行的都会去执行的,他不接受任何的参数。 Promise的优点: – 对象的状态不受外界的影响,只有异步的操作结果才能改变他的状态。...,是为了解决异步编程的一种方案 他是一个构造函数,接受一个函数作为参数,返回一个Promise实列。
也就是set开头的最后执行,promise在set之前,promise方法里的第一个执行方法不入栈,在正常栈里执行 console.log('golb1'); setImmediate(function...(function(resolve) { console.log('immediate1_promise'); resolve(); }).then(function...(function(resolve) { console.log('timeout1_promise'); resolve(); }).then(function...(function(resolve) { console.log('glob1_promise'); resolve(); }).then(function() { console.log...glob1_nextTick glob1_then timeout1 timeout1_promise timeout1_nextTick timeout1_then immediate1 immediate1
resolve(value); } else { reject(error); } }) Promise构造函数接受一个函数作为参数,该函数的两个参数分别是...resolve作用是将Promise对象状态由“未完成”变为“成功”,也就是Pending -> Fulfilled,在异步操作成功时调用,并将异步操作的结果作为参数传递出去;而reject函数则是将Promise...对象状态由“未完成”变为“失败”,也就是Pending -> Rejected,在异步操作失败时调用,并将异步操作的结果作为参数传递出去。...then Promise实例生成后,可用then方法分别指定两种状态回调参数。...then 方法可以接受两个回调函数作为参数: Promise对象状态改为Resolved时调用 (必选) Promise对象状态改为Rejected时调用 (可选) 基本用法示例 function sleep
this.queue = [] this.flushing = false this.enqueue = function (executor) { const p = new Promise...} } } function Task(executor, resolve, reject) { this.execute = () => { return new Promise
我们优化一下上面的代码: var promise = new Promise(function (resolve, reject) { $.ajax({...对象,然后有两个参数,第一个为resolve,第二个为reject,前者一般为成功的时候调用,后者是失败的时候调用。...我们主要说调用那里的代码,then方法可以把回调函数分离出来,then函数有两个参数,均为函数,前者是请求成功的函数,后者是请求失败的函数。...上述的代码不变,我们把调用改一下: //适用于多个ajax请求,但是每个ajax返回数据无关联的情况 Promise.all([promise, handler()])....promise不止用于异步请求,很多场景都可以用,需要大家灵活应用。
; } ) .catch( reason => { console.error('fail2:', reason); } ); 答案 & 解析: // 解析:.then可以接收两个参数...注:_notify函数用作异步执行传入的函数数组以及参数;代码中将_callbacks、_errbacks传给_notify函数后立即清空,是为了保证_callbacks、_errbacks至多被执行一次...* These are written as Node.js modules with a few well-known exports: * * resolved(value): creates.../RookiePromise.js'); RookiePromise.resolved = RookiePromise.resolve; RookiePromise.rejected = RookiePromise.reject...执行测试 npx promises-aplus-testsRookiePromiseTestAdapter.js > log.txt ?
那么什么是Promise?Promise是JS对象,它们用于表示一个异步操作的最终完成 (或失败), 及其结果值.查看MDN 您可以通过使用回调方法或使用Promise执行异步操作来获得结果。...对象 它们是JS中构成Promise的核心部分。...所以,我们为什么需要JS中的Promise? 为了明白这个问题,我们得先来聊聊为什么在大多数的JS开发者中,仅仅使用CallBack的方法是远远不够的。...方法 JS中的Promise构造函数定义了几种静态方法,可用于从Promise中检查一个或者多个结果 Promise.all 当你想要累计一批异步操作并最终将它们的每一个值作为一个数组来接收时,满足此目标的...每当可迭代的Promise中的一个Promise以该Promise的值或原因解析或拒绝时,此方法都会返回一个履行或拒绝的Promise。
Demo2——then方法没有回调处理参数(无任何参数) //demo2---then没有回调处理参数 var promise1 = new Promise(function(resolve, reject...4、返回一个已经是接受状态的 Promise,那么 then 返回的 Promise 也会成为接受状态,并且将那个 Promise 的接受状态的回调函数的参数值作为该被返回的Promise的接受状态回调函数的参数值...5、返回一个已经是拒绝状态的 Promise,那么 then 返回的 Promise 也会成为拒绝状态,并且将那个 Promise 的拒绝状态的回调函数的参数值作为该被返回的Promise的拒绝状态回调函数的参数值...Promise 变为终态时的回调函数的参数是相同的。...方法返回一个新的 Promise 实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中
JS手撕(九) 常用Promise API 前言 上一篇已经手撕了一个简单版本的Promise。现在就在继续手撕常用的Promise API。...Promise.resolve() Promise.resolve(value)方法返回一个以给定值解析后的Promise对象。如果value是Promise对象,则直接返回该promise。...不传参 Promise.myReject().catch(console.log); Promise.all() 参数:promises,promise 的iterable类型(Array、Map、...() 参数:promises,promise 的iterable类型(Array、Map、Set) 返回一个新的 Promise,第一个完成的结果是成功则成功,反之则失败。...因为p4先得到结果 参考 Promise学习笔记(一) | 赤蓝紫 GitHub - qianlongo/fe-handwriting: 手写各种js Promise、apply、call、bind、
使用 Promise Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。...如果你还不了解 Promise,可以参考 JavaScript Promise。...以下实例使用 Promise 创建集合: const MongoClient = require("mongodb").MongoClient; const url = "mongodb://localhost...).finally(() => { conn.close(); }); }).catch((err) => { console.log("数据库连接失败"); }); Promise
/js/script.js') init() // 定义在 ..../js/script.js', success, fail) function success() { console.log('success') init() // 定义在 ..../js/script.js 中的函数 } function fail() { console.log('fail') } 上面这样做能够保证在脚本加载完成的时候,再去执行脚本里的函数。...(res => {}) 当参数只有 onRejected 的时候,需要把第一个参数设置为 null: new Promise((resolve, reject) => { reject() }...参数必须是一个可迭代对象,通常是数组。
Js函数里面的参数 在看 Js参数传递时,先看最基本的,会为下面做铺垫 function fn() { var a = 100 console.log(a); //100 } fn()...console.log(a); //100 a = 100 console.log(a); //100 } fn(100) console.log(a); //报错a is not defined Js...参数传递 在这里,直接通过具体案例一个个循环渐进的说明 js的参数传递 普通类型参数传递 首先就是最简单的普通类型(string,number,boolean,null,undefined,symbol...*/ 引用数据类型参数传递 案例1: var a = { age: 1 } a = { age: 100 } console.log(a); //{age:100} 案例2: var a = { age
Promise对象是干嘛用的?...resolve("success"); } else { reject("error"); } }); 二、链式调用-then方法 使用then方法调用,第一个参数是成功回调...,第二个参数是失败回调,如下 hello.then( function (value) { console.log(value) }, function (err...) { console.log(err) } ); 下面我们分别定义三个方法,参数为延时执行的秒数 chenqionghe get muslce function chenqionghe...一般来说,不要在then方法里面定义 Reject 状态的回调函数(即then的第二个参数),总是使用catch方法。
领取专属 10元无门槛券
手把手带您无忧上云