在es6中,promise用于创建promise对象并进行异步操作,语法为“const promise = new Promise((resolve,reject)=>{...})”;它持有异步操作的状态,用来表示异步操作的不同结果。

本教程操作环境:windows10系统、ECMAScript 6.0版、Dell G3电脑。
Promise是ES6中提供的一个异步编程的解决方案,Promise本身是一个构造函数
typeof Promise // function
一般情况下 我们在开发中会使用 new Promise() 调用构造函数,创建一个新的Promise对象
创建 Promise 对象进行异步操作
Promise 也是一个构造函数,需要使用 new 关键字来创建实例,创建时接受一个函数,且该函数有两个函数类型的参数:
resolve
reject
所以创建 Promise 的操作就是:
const promise = new Promise((resolve,reject)=>{...})
resolve 和 reject 两个函数参数决定了当前 Promise 的状态改变以及异步操作的结果如何处理,他们都可以将异步操作的结果传递出去。
1、对象的状态不受外界影响。
Promise对象是一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。
只有异步操作的结果,可以决定Promise是哪一种状态,任何其他操作都无法改变这个状态
2、一旦Promise状态改变,就不会再有变化,任何时候都可以得到这个结果。
Promise对象的状态改变,只有两种可能:从pending变为fulfilled 或者 从pending变为rejected。只要这两种情况发生,状态就不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的
使用Promise的好处,就是在处理异步程序时,将异步操作队列化,按照期望的顺序执行,返回符合预期的结果,这样即使是多重异步操作,也可以方便的使用Promise进行链式调用
3、Promise也有一些缺点。
首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。
下面代码创造了一个Promise实例。
const promise = new Promise(function(resolve, reject) { // ... some code if (/* 异步操作成功 */){ resolve(value); } else { reject(error); } });
Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。
promise.then(function(value) { // success }, function(error) { // failure });
then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。
【相关推荐:javascript视频教程、web前端】
Atas ialah kandungan terperinci es6中promise有什么用. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
es6 ciri baharu
Apakah ciri baharu es6
pautan pelayan emule
Cara menukar bandar di Douyin
Bagaimana untuk melangkau sambungan rangkaian semasa pemasangan win11
Apakah perpustakaan pihak ketiga yang biasa digunakan dalam PHP?
Apakah perbezaan antara ruang lebar penuh dan ruang separuh lebar?
apa itu pengoptimuman