JavaScript Promise基础教程文档

收录于 2023-04-20 00:10:05 · بالعربية · English · Español · हिंदीName · 日本語 · Русский язык · 中文繁體

现实生活中的承诺表达了两个或更多人之间的信任,并保证一定会发生某件事。在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的优点

处理异步操作的更好选择。 提供简单的错误处理和更好的代码可读性。