ECMAScript6 Promise

2024-01-07 20:18
文章标签 promise ecmascript6

本文主要是介绍ECMAScript6 Promise,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Promise在Javascript中早就已经实现,在ECMAScript6中正式加入到标准。那么Promise到底是干什么的?怎么用?

一、Promise介绍

Promise是一个对象,用来传递异步操作的消息,它有三种状态,pending(进行中)、resolved(成功)、rejected(失败)。

二、Promise基本用法

var promise = new Promise(function(resolve,reject){

if(/*成功*/) resolve(value);

else reject(error)

})

promise.then( function(value){

console.log(value)

} , function(error){

console.log(error);

} )

上面代码中,在初始化Promise时,Promise构造函数接收一个函数作为参数。这个函数又有两个参数resolve和reject,从红色代码部分可以看出这个歌参数也是函数,但是不同于其他参数,resolve和reject这两个函数是内置的,由javascript引擎提供。resolve的作用是将状态从pending改变为resolved,reject是将状态改为rejected。

再看then方法,这个方法接收两个函数作为参数,在上面的代码中分别是绿色部分和黄色部分。第一个函数也就是绿色部分是指定将状态改变为resolved时的回调函数,也就是说在上述代码中如果resolve(value)这个句执行,就会触发绿色部分的回调。执行reject则会触发黄色部分函数的回调。

三、异常捕获

Promise中是如何捕获异常的呢?看下面的代码。

var promise = new Promise(function(resolve,reject){

throw new Error('error');

})

promise.then(function(value){

console.log(value)

},function(error){

console.log(error+' reject');

}).catch(function(error){

console.log(error+' catch');

})

上述代码执行出得效果是error reject,为什么不是error catch呢?其实这样的,reject的回调函数不仅能作为将promise状态改变为rejected,而且还能处理上一步抛出异常时的情况。那么既然这样catch也有什么存在的意义呢?首先reject的回调不一定都会定义,其次catch可以捕获整个流程中所有环节抛出的异常,而reject只能处理上一步发生的异常。把上面代码改造一下,看得会更清楚。

var promise = new Promise(function(resolve,reject){

throw new Error('error');

})

promise.then(function(value){

console.log(value)

},function(error){

console.log(error+' reject');

throw new Error('error1');

})

.then(function(value){

console.log(value);

})

.catch(function(error){

console.log(error+' catch');

})

执行上述代码,可以看出红色部分的异常被catch部分捕获到了,是因为黄色部分的没有定义reject的回调,所以红色部分的异常一直冒泡到最后。

四、Promise.all()

Promise.all()是将多个promise实例,包装成一个新的promise实例。

var promiseAll = function(name){

return new Promise(function(resolve,reject){

resolve('my name is '+name);

})

}

var promise1 = promiseAll('111'),

promise2 = promiseAll('222'),

promise3 = promiseAll('333');

var p = Promise.all([promise1,promise2,promise3]);

p.then(function(data){

console.log(data)

})

.catch(function(e){

console.log(e)

})

上面代码中promiseAll是一个返回一个Promise对象的函数,Promise1,promise2,promise3都是通过promiseAll得到一个Promise对象。p是通过Promise.all()方法生成的一个新的实例。最后的结果是["my name is 111", "my name is 222", "my name is 333"],也就将所有包装的Promise对象返回的结果包装成一个数组。值得注意的是Promise.all()这个方法传入的参数也是一个数组,否则会报错。另外p所包装的Promise对象中只要有一个失败,p的状态就是失败。

五、Promise.race()

Promise.race()同样是将多个Promise对象包装成一个新的Promise对象

var p = Promise.race([promise1,promise2,promise3]);

新的Promise对象p的装态是根据所包装的对象promise1,promise2,promise3中状态最先改变的Promise对象确定的,那个率先改变的Promise对象的值就传给p的回调函数。

上面是简单介绍了promise,那个意义主要是解决回调的多层嵌套,是代码更加的清晰。

更多promise内容请移步http://es6.ruanyifeng.com/#docs/promise

这篇关于ECMAScript6 Promise的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/581124

相关文章

【JavaScript】异步操作:Promise对象

文章目录 1 概述2 Promise 对象的状态3 Promise 构造函数4 Promise.prototype.then()5 then() 用法辨析6 微任务 1 概述 Promise 对象是 JavaScript 的异步操作解决方案,为异步操作提供统一接口。它起到代理作用,充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口。 Promise 的设计思想是,

Promise的使用总结

Promise 是 JavaScript 中用于处理异步操作的一种机制。它提供了一种更清晰和更简洁的方式来处理异步代码,避免了回调地狱。以下是 Promise 的使用方法,包括创建 Promise、链式调用、错误处理、并行执行等。 1. 创建 Promise 你可以使用 new Promise 来创建一个新的 Promise 对象。Promise 构造函数接受一个执行函数,该函数有两个参数:r

Java多线程编程模式实战指南:Promise模式

文章来源: http://www.infoq.com/cn/articles/design-patterns-promise?utm_source=infoq&utm_campaign=user_page&utm_medium=link 文章代码地址: https://github.com/Viscent/JavaConcurrencyPattern/ 一、

promise.all 和 promise.allSettled

Promise.all 和 Promise.allSettled 都是用来处理多个 Promise 实例的方法,但是它们之间有几个关键的区别: Promise.all Promise.all 接受一个 Promise 的可迭代对象(如数组),并返回一个新的 Promise 实例。这个新的 Promise 实例会在所有输入的 Promise 都成功(resolved)后才成功(resolve),

Node.js 异步编程深度解析:回调函数、Promise 以及 async/await

Node.js 异步编程深度解析:回调函数、Promise 以及 async/await 目录 🔄 回调函数的基础与挑战💬 Promise 的使用与链式调用🚀 async/await 的简化与异常处理 🔄 回调函数的基础与挑战 回调函数的基本用法 回调函数是 Node.js 异步编程的基础,通过将函数作为参数传递给异步操作,可以在异步操作完成时执行特定的逻辑。回调函数的基

2024年最新版Ajax+Axios 学习【包含原理、Promise、报文、接口等...】

基础知识 AJAX概念 AJAX概念:是浏览器与服务器进行数据通信的技术。 认识URL 定义:统一资源定位符,简称网址,用于访问网络上的资源。 组成: http协议:超文本传输协议,规定浏览器和服务器之间传输数据的格式。域名:标记服务器在互联网中方位。资源位置:标记资源在服务器下的具体位置。 查询参数 定义:浏览器提供给服务器的额外信息,让服务器返回浏览器想要的数据。 语法:

Promise并发

Promise提供4个静态方法来处理并发情况 Promise.all() 在所有传入Promise都兑现时兑现,在任一Promise拒绝时拒绝。Promise.allSettle() 在所有传入Promise都敲定时兑现。Promise.any() 在任一Promise兑现时兑现,在所有Promise都拒绝时拒绝。Promise.race() 在任一Promise兑现时兑现,在任一Promise

Promise中使用reject和throw Error的异同点

在JavaScript的异步编程中,Promise 是一个非常重要的概念。它代表了异步操作的最终完成(或失败)及其结果值。在这篇文章中,我们将探讨Promise的几种状态,以及reject和throw Error的异同,最后讨论在Promise中使用reject后代码的执行情况。 1. Promise的几种状态 Promise 对象有三种状态,分别是: Pending(进行中):这是初始状态

es6系列教程 - promise常见用法详解

promise为es6引进的语言标准,为异步编程的一种解决方案; js实现异步:setTimeout promise 关于promise我在之前的文章已经应用过好几次,如[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist,本文就来讲解下promise的常见用法. 为什么会有promise,他的作用是什么? pro

你所必须掌握的三种异步编程方法callbacks,listeners,promise

目录: 前言 Callbacks Listeners Promise 前言 coder都知道,javascript语言运行环境是单线程的,这意味着任何两行代码都不能同时运行。多任务同时进行时,实质上形成了一个队列,当队列中前一个事件结束时,才执行下一个事件。 如果队列中任何一个事务费时太长,则会造成浏览器假死,阻塞其他事务正常进行,影响用户体验。 js中将任务执行分为同步模式和异步模式,上面一种