创建承诺时,它处于挂起状态,这意味着该过程尚未完成。如果进程成功完成,则状态将更改为“已完成”,如果进程由于某些错误而失败,则状态将更改为“已拒绝”。
您可以想到从服务器请求数据时处于挂起状态的情况。如果成功检索信息,它将处于已履行状态,否则由于某些错误,它将处于拒绝状态。
创建承诺很简单,我们使用构造函数。构造函数将回调函数作为参数。该函数将两个函数作为参数,即 and。Promise()
resolve()
reject()
如果承诺成功完成,则调用该函数。如果发生某些错误,则调用该函数。resolve()
reject()
let myPromise = new Promise(function(resolve, reject) { // some producing code... (Code that may take some time) });
让我们看一个简单的JavaScript程序,该程序通过检查候选人的年龄来检查候选人是否有资格投票。假设下面的程序是异步的,所以这就是我们将如何使用 Promise 来处理它。
const age = 19; let statusCheck = new Promise(function(resolve, reject) { if (age >= 18) { // promise will be fulfilled if the condition is true resolve("Eligible to vote"); } else { // promise will be rejected if the condition failed reject("Not eligible to vote"); } }) console.log(statusCheck); // Output: Promise { 'Eligible to vote' }
上面的程序创建了一个承诺,如果进程成功,则 i.e.and.is 使用两个函数,如果进程失败,则使用两个函数。
如果年龄值大于或等于 18,则上述程序将得到满足,否则将调用函数,输出将为:resolve()
reject()
resolve()
reject()
reject()
Promise { <rejected> 'Not eligible to vote' }
承诺有助于一个接一个地处理多个异步任务。这些方法用于将进一步的操作与已解决的承诺相关联。此外,这些方法返回可以链接的承诺。Promise.prototype.then()
Promise.prototype.catch()
Promise.prototype.finally()
该方法有两个参数;第一个参数是承诺的已满足情况的回调函数,第二个参数是承诺被拒绝情况的回调函数。每个方法返回一个新生成的可以链接的 promise 对象。.then()
.then()
方法的语法,.then()
promiseObject.then(handleFulfilled, handleRejected);
它可以像这样链接,
promiseObject .then(handleFulfilledA, handleRejectedA) .then(handleFulfilledB, handleRejectedB) .then(handleFulfilledC, handleRejectedC)
JavaScript 承诺有两个参数,成功和失败。两者都是可选的,因此您只能添加其中一个或两个。您只能在最后一个方法之后添加分号,否则它会破坏链条。;
.then()
let chainedPromises = new Promise(function(resolve, reject) { resolve("1. JavaScript Promise Resolved"); }) chainedPromises .then((result) => { console.log(result); }) .then((result) => { console.log("2. Chaining in promises") }) .then((result) => { console.log("3. Last method") })
输出
1. JavaScript Promise Resolved 2. Chaining in promises 3. Last method
在这里,每个方法都返回一个新创建的链式承诺对象。处理继续到下一个链接,即使任何一个缺少返回承诺对象的回调函数,这意味着每个拒绝回调函数都被省略,直到 finalmethod。.then()
.then()
.catch()
该方法与成功履行承诺时没有回调函数槽的方法相同。它用于处理承诺被拒绝的情况。例如.catch()
.then()
let chainedPromises = new Promise(function(resolve, reject) { reject("1. JavaScript Promise Rejected"); }) chainedPromises .then((result) => { console.log(result); }) .then((result) => { console.log("2. Chaining in promises") }) .then((result) => { console.log("3. Last method") }) .catch((result) => { console.log(result); })
输出
1. JavaScript Promise Rejected
在上面的代码中,只执行该方法,因为承诺被拒绝。该方法用于处理承诺中的错误。.catch()
.catch()
该方法用于定义要运行的代码块,而不考虑结果。它计划在承诺结算时调用的回调函数。