在javascript中,Promise是一个对象,可确保将来(需要时)产生单个值。 javascript中的Promise用于管理和处理异步操作。
JavaScript Promise作用
到目前为止,我们了解了用于处理数据的事件和回调函数。但是,其范围是有限的。这是因为事件无法管理和操作异步操作。因此,Promise是有效处理异步操作的最简单,更好的方法。
Promise和事件处理程序之间可能存在两个差异:
Promise永远不会失败或成功两次或更多次。这只能发生一次。一个Promise既不能从成功变成失败,也不能从失败变成成功。如果Promise成功还是失败,并且过了一段时间,如果添加了任何成功/失败回调,则无论事件发生在何处,都将调用正确的回调。
Promise的术语
Promise可以以以下一种状态出现:
pending:待处理的承诺尚未被拒绝或尚未实现。
fulfilled:相关的诺言操作已成功完成。
rejected:相关的诺言操作未能实现。
settled:该操作已完成或被拒绝。
因此,promise表示异步操作及其结果的完成。它可以是成功完成承诺,也可以是失败,但最终可以完成。 Promise使用 then(),仅在完成承诺解决后才执行。
JavaScript Promise承诺:
除非当前未完成js事件循环的执行(成功或失败),否则永远不会在其之前调用回调。即使存在带有then()的回调,但是只有在完全执行异步操作之后,才会调用它们。如果通过多次调用then()可以包含多个回调,则每个回调将按链执行,即按照插入的顺序一个接一个地执行。
Promise中的方法
Promise的功能几乎可以在所有流行的Web浏览器(例如Chrome,Mozilla,Opera等)上执行。方法列表为:
方法名称 | 摘要 |
Promise.resolve(promise) | 仅当promise.constructor == Promise时,此方法才会返回promise。 |
Promise.resolve(thenable) | 从thenable包含then()作出新的承诺。 |
Promise.resolve(obj) | 做出对一个对象的承诺。 |
Promise.reject(obj) | 对对象做出承诺拒绝。 |
Promise.all(array) | 当数组中的每个项目都完成时做出承诺,或者在数组中的每个项目都没有完成时拒绝。 |
Promise.race(array) | 如果数组中的任何项目被立即满足,它将解决承诺;或者,如果任何项目被立即拒绝,则将拒绝承诺。 |
Promise中的构造函数
构造函数 | 说明 |
new Promise(function(resolve, reject){}); | 在这里,resolve(thenable)表示将使用then()解决承诺。 Resolve(obj)表示将通过对象实现承诺。 Reject(obj)表示被对象拒绝的承诺。 |
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:成功执行诺言后,将调用resolve参数,从而提供结果。Reject::当承诺被拒绝时,将拒绝参数被调用,从而导致错误。
这意味着要么调用了resolve要么拒绝了。在这里,then()接受了一个参数,如果承诺被解决,该参数将执行。否则,将在拒绝诺言的情况下调用catch()。
使用Promises的优点
处理异步操作的更好选择。
提供简单的错误处理和更好的代码可读性。