JavaScript Promise
在现实生活中,Promise表达了两个或多个人之间的信任和对某个特定事情的确信。在JavaScript中,Promise是一个对象,它确保在将来(当需要时)产生一个单一的值。Promise在JavaScript中用于管理和处理异步操作。
JavaScript Promise的必要性
到目前为止,我们已经学习了处理数据的事件和回调函数。但是,它的作用范围有限。这是因为事件无法管理和操作异步操作。因此,Promise是处理异步操作的最简单和更好的方法。
Promise和事件处理程序之间可能存在两个不同之处:
- 一个Promise永远不能失败或成功两次或更多次。这只能发生一次。
- 一个Promise既不能从成功转到失败,也不能从失败转到成功。如果一个Promise已经成功或失败,并且在一段时间后添加了任何成功/失败回调,正确的回调将被调用,不管事件发生在之前是否。
Promise的术语
一个Promise可以处于以下任何一种状态:
- pending: Promise既没有被拒绝也没有被充实。
- fulfilled: 相关的Promise操作成功完成。
- rejected: 相关的Promise操作未能完成。
- settled: 操作被充实或被拒绝。
因此,Promise代表了一个异步操作的完成以及其结果。它可以是Promise的成功完成,也可以是Promise的失败,但最终是完成的。Promise使用 then() ,只有在Promise解决完成后才执行。
Promise的Promise
JavaScript的PromisePromise:
- 除非js事件循环的当前执行完成(成功或失败),否则回调在之前不会被调用。
- 即使回调函数包含then(),它们也只会在异步操作完全执行后才调用。
- 当通过多次调用then()添加多个回调时,它们将按照它们插入的顺序以链式方式执行,即一个接一个地执行。
Promise的方法
Promise的函数可以在几乎所有流行的Web浏览器上执行,如Chrome、Mozilla、Opera等。方法列表如下:
方法名称 | 摘要 |
---|---|
Promise.resolve(promise) | 当promise.constructor==Promise 时,该方法只返回promise。 |
Promise.resolve(thenable) | 从具有then()方法的thenable对象创建一个新的promise。 |
Promise.resolve(obj) | 创建一个针对对象的resolved promise。 |
Promise.reject(obj) | 创建一个针对对象的rejected promise。 |
Promise.all(array) | 当数组中的每个项均被fulfilled时,创建一个resolved promise;当数组中的项未被fulfilled时,创建一个rejected promise。 |
Promise.race(array) | 如果数组中的任何项被fulfilled,则立即resolve该promise;如果任何项被rejected,则立即reject该promise。 |
Promise 中的构造函数
new Promise(function(resolve, reject){}); | 这里,resolve(thenable)表示promise将使用then()方法解决。 Resolve(obj)表示promise将被对象fulfilled。 Reject(obj)表示promise将被对象拒绝。 |
---|---|
Promise实现
<html>
<head>
<h2> Javascript Promise</h2>
</br> </head>
<body>
<script>
var p=new Promise(function(resolve, reject){
var x= 2+3;
if(x==5)
resolve(" executed and resolved successfully");
else
reject("rejected");
});
p.then(function(fromResolve){
document.write("Promise is"+fromResolve);
}).catch(function(fromReject){
document.write("Promise is "+fromReject);
});
</script>
</body>
</html>
在上述的Promise实现中,Promise构造函数接受一个回调函数作为参数。这个回调函数接受两个参数,即:
- 解决(Resolve): 当promise成功执行时,调用resolve参数,提供结果。
- 拒绝(Reject): 当promise被拒绝时,调用reject参数,导致错误。
这意味着要么调用resolve,要么调用reject。在这里,then()方法接受一个参数,如果promise被解决,将会执行该参数。否则,catch()方法将被调用,传入promise的拒绝结果。
使用Promise的优势
- 更好的处理异步操作的选项。
- 提供简单的错误处理和更好的代码可读性。