JavaScript Promise

在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的优点

处理异步操作的更好选择。

提供简单的错误处理和更好的代码可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值