JS手撕(九) 常用Promise API 前言 上一篇已经手撕了一个简单版本的Promise。现在就在继续手撕常用的Promise API。...Promise.resolve() Promise.resolve(value)方法返回一个以给定值解析后的Promise对象。如果value是Promise对象,则直接返回该promise。...失败状态的Promise const p2 = new Promise((resolve, reject) => reject("error")); Promise.myResolve(p2).catch...Promise.reject() Promise.reject() 方法返回一个带有拒绝原因的 Promise 对象。所以只需要直接返回一个新的Promise对象就行了。...因为p4先得到结果 参考 Promise学习笔记(一) | 赤蓝紫 GitHub - qianlongo/fe-handwriting: 手写各种js Promise、apply、call、bind、
Promise#then promise.then(onFulfilled, onRejected); 示例:Promise#then var promise = new Promise(function...Promise.resolve Promise.resolve(promise); Promise.resolve(thenable); Promise.resolve(object); 示例:Promise.resolve...(r)); // true 和 Promise.resolve不同的是,即使Promise.reject接收到的参数是一个promise对象,该函数也还是会返回一个全新的promise对象。...Promise.all Promise.all(promiseArray) 示例 var p1 = Promise.resolve(1), p2 = Promise.resolve(2),...参数传递promise数组中所有的promise对象都变为resolve的时候,该方法才会返回, 新创建的promise则会使用这些promise的值。
.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 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。 # 描述 一个 Promise 对象代表一个在这个 promise 被创建出来时不一定已知的值。...# Promise 的链式调用 我们可以用 promise.then(),promise.catch() 和 promise.finally() 这些方法将进一步的操作与一个变为已敲定状态的 promise...返回一个 promise,该 promise 在所有 promise 完成后完成。并带有一个对象数组,每个对象对应每个 promise 的结果。...# Promise.any(iterable) (opens new window) 接收一个 Promise 对象的集合,当其中的一个 promise 成功,就返回那个成功的 promise 的值。...失败,那么 Promise.all 返回的 promise 对象失败 在任何情况下,Promise.all 返回的 promise 的完成状态的结果都是一个数组 Promise.all = function
该构造函数用于封装尚未支持Promise的函数或API,例如上面的XMLHttpRequest对象。传递给Promise构造函数的回调包含用于从远程服务获取数据的异步代码。...如果与Promise相关的操作成功(在我们的示例中是远程 API 调用),并且调用了 resolve 方法,那么Promise称为fulfilled。...让我们以前面的代码为例: fetch('') .then(res => res.json...现在运行代码,会在屏幕上看到下面的输出: TypeError: res.jsn is not a function promise callback* index.js:9:27 我正在运行的文件名为index.js。
catch catch 是 promise 实例上的方法,添加一个拒绝态的回调到当前 promise,然后返回一个新的 promise。...resolve 返回一个 Promise 对象,这样就能将该值以 Promise 对象形式使用;reject 返回一个状态为失败的 Promise 对象,并将给定的失败信息传递给对应的处理方法。...race race 也是一个静态方法,它也接受一个迭代器,返回一个 promise,一旦迭代器中的某个 promise 解决或拒绝,返回的 promise 就会解决或拒绝。...最后 Promise 是解决异步回调问题的利器,使用 promise 可以把嵌套式的函数调用写成链式调用,有利于代码的阅读,有了 promise,我们可以把很多异步函数封装成 promise 风格的函数.../util.js', { encoding: 'utf-8' }).then(data => { console.log(data); }).catch(err => { console.log
四、Promise与异步 Promise是异步的。js异步操作是通过js的事件循环机制EventLoop实现的。...对于异步任务来说,当其可以被执行时,会被放到一个 任务队列(task queue) 里等待JS引擎去执行。...当执行栈中的所有同步任务完成后,JS引擎才会去任务队列里查看是否有任务存在,并将任务放到执行栈中去执行,执行完了又会去任务队列里查看是否有已经可以执行的任务。...总结起来js引擎对程序的执行顺序是:1。先执行同步任务的程序 2。 在执行异步任务里的微任务 3。所有微任务都执行完了后就执行异步的宏任务,但这里是一个一个宏任务去执行,不是一下子执行完。...after");//同步任务 } testFn(); 上图结果证明了上述所说的js的执行顺序 。
Promise是什么?...抽象表达: Promise是ES6中新增的规范; Promise是js中异步编程的新解决方案(旧方案采用函数回调); 具体表达: 从语法上说:Promise是一个构造函数; 从功能上说:Promise...5.4.1 API **Promise 构造函数 ** Promise(executor){} **executor 函数:**执行器 (resolve, reject) => {} **resolve...promise 对象; 说明:返回一个成功/失败的 promise 对象; //创建promise.resolve对象 //如果传入的对象为 非promise对象 则返回的是一个 成功的promise...非promise对象 则参数的结果决定了 resolve的结果 let p = Promise.reject(521); let c = Promise.reject(new Promise(
Promise 研究 Promise 的动机大体有以下几点: 对其 api 的不熟悉以及对实现机制的好奇; 很多库(比如 fetch)是基于 Promise 封装的,那么要了解这些库的前置条件得先熟悉...本札记系列总共三篇文章,作为之前的文章 Node.js 异步异闻录 的拆分和矫正。...Promise札记 Generator札记 Async札记 Promise/A+ 核心 在实现一个符合 Promise/A+ 规范的 promise 之前,先了解下 Promise/A+ 核心,想更全面地了解可以阅读...; Promise 的状态一旦转化,将不能被更改; repromise api 食用手册 Promise.resolve() Promise.resolve() 括号内有 4 种情况 /* 跟 Promise...(err) } else { resolve(data) } })) }) } } then/catch/done 这几个 api
Promise是啥? Promise是异步编程的一个解决方案,相比传统的“回调函数”方法,使用Promise更为合理和强大,避免了回调函数之间的层层嵌套,也使得代码结构更为清晰,便于维护。 ?...图:使用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...C.第3步:执行测试 npx promises-aplus-testsRookiePromiseTestAdapter.js > log.txt ? ----
也就是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
return new Promise((resolve, reject)=> { // 假设此处是异步请求某个数据 $.ajax({ url: '......
所谓的Promise,简单的来说就是一个可以存放未来才能结束的任务或者事件。 1....Promise实列有三个状态: – pending (进行中) – resolved (成功) – rejected(失败) 当要处理某个任务的时候,promise的状态是pending,任务完成是状态就变成了...3.all() 接受一个数组作为自己的参数,数组中每一项都是一个promise对象,当数组的每一个promise状态时resolved时,all方法的状态才会变成resolved,有一个变成rejected...5finally() 他是不管promise时什么状态都会执行的都会去执行的,他不接受任何的参数。 Promise的优点: – 对象的状态不受外界的影响,只有异步的操作结果才能改变他的状态。...– 一旦状态改变就不会在变,任何时候都可以得到这个结果,就如他的名字一样promise(承诺)。 Promise的缺点: – 无法去取消promise,只要创建就会执行,无法中途去终止。
Promise Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大。...值得注意的是,Promise新建后就会立即执行。...原因则是Promise属于JavaScript引擎内部任务,而setTimeout则是浏览器API,而引擎内部任务优先级高于浏览器API任务,所以有此结果。...async函数对 Generator 函数的改进,async 函数必定返回 Promise,我们把所有返回 Promise 的函数都可以认为是异步函数。...在该函数中,利用await来等待一个Promise。 Promise优缺点 优点 缺点 解决回调 无法监测进行状态 链式调用 新建立即执行且无法取消 减少嵌套 内部错误无法抛出
readline.createInterface({ input, output }); const answer = await rl.question('What do you think of Node.js
本文介绍N-API中的Promise功能的使用。Promise相关的API一共有四个。...然后返回给js层,但是这个Promise是未决议的,这里我们通过给Libuv线程池实现一个异步的操作,然后在回调里resolve这个Promise。...napi_create_promise API会生成两个对象,一个Promise(返回给js),一个是deferred,我们修改Promise状态的时候,是通过操作deferred变量,所以我们首先保存了该变量的值...(deferred)的状态,这时候,js层的回调就会被执行。...以上就是N-API中关于Promise的使用。
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({...= new Promise(function (resolve, reject) { $.ajax({ url: '/ashx/...然后还要讲的一个函数是promise的all函数。all函数主要用于多个请求的数据无关联的时候。...上述的代码不变,我们把调用改一下: //适用于多个ajax请求,但是每个ajax返回数据无关联的情况 Promise.all([promise, handler()])....promise不止用于异步请求,很多场景都可以用,需要大家灵活应用。
那么什么是Promise?Promise是JS对象,它们用于表示一个异步操作的最终完成 (或失败), 及其结果值.查看MDN 您可以通过使用回调方法或使用Promise执行异步操作来获得结果。...对象 它们是JS中构成Promise的核心部分。...所以,我们为什么需要JS中的Promise? 为了明白这个问题,我们得先来聊聊为什么在大多数的JS开发者中,仅仅使用CallBack的方法是远远不够的。...仅通过三个异步API调用,回调地狱就开始陷入与通常的上下方向相反的方向。...方法 JS中的Promise构造函数定义了几种静态方法,可用于从Promise中检查一个或者多个结果 Promise.all 当你想要累计一批异步操作并最终将它们的每一个值作为一个数组来接收时,满足此目标的
Promise API // 1. 构造方法 const p = new Promise((resolve, reject) => { /* executor*/ // 1.1....自己实现一版 Promise Promise有很多社区规范,如 Promise/A、Promise/B、Promise/D 以及 Promise/A 的升级版 Promise/A+;Promise/A...* 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 ?
领取专属 10元无门槛券
手把手带您无忧上云