ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript 承诺 - 现代 JS

2022-11-07 14:23:48  阅读:355  来源: 互联网

标签:JavaScript 状态 服务器 创造 函数 承诺 方法 语法


加工

创建承诺时,它处于挂起状态,这意味着该过程尚未完成。如果进程成功完成,则状态将更改为“已完成”,如果进程由于某些错误而失败,则状态将更改为“已拒绝”。

您可以想到从服务器请求数据时处于挂起状态的情况。如果成功检索信息,它将处于已履行状态,否则由于某些错误,它将处于拒绝状态。

 

创造承诺

创建承诺很简单,我们使用构造函数。构造函数将回调函数作为参数。该函数将两个函数作为参数,即 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' }

 

JavaScipt承诺链

承诺有助于一个接一个地处理多个异步任务。这些方法用于将进一步的操作与已解决的承诺相关联。此外,这些方法返回可以链接的承诺。Promise.prototype.then()Promise.prototype.catch()Promise.prototype.finally()

JavaScript .then() 方法

该方法有两个参数;第一个参数是承诺的已满足情况的回调函数,第二个参数是承诺被拒绝情况的回调函数。每个方法返回一个新生成的可以链接的 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()

JavaScript .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()

JavaScript .final() 方法

该方法用于定义要运行的代码块,而不考虑结果。它计划在承诺结算时调用的回调函数。

标签:JavaScript,状态,服务器,创造,函数,承诺,方法,语法
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有