📜  JavaScript |承诺

📅  最后修改于: 2022-05-13 01:55:49.030000             🧑  作者: Mango

JavaScript |承诺

Promise用于处理 JavaScript 中的异步操作。在处理多个异步操作时,它们很容易管理,其中回调可以创建回调地狱,导致无法管理的代码。

在使用 Promise 事件和回调函数之前,它们的功能有限并且创建了难以管理的代码。
多个回调函数会创建回调地狱,导致代码无法管理。此外,任何用户都不容易同时处理多个回调。
事件不擅长处理异步操作。

Promise 是以最简单的方式处理异步操作的理想选择。它们可以轻松处理多个异步操作,并提供比回调和事件更好的错误处理。换句话说,我们可以说,Promise 是同时处理多个回调的理想选择,从而避免了不受欢迎的回调地狱情况。 Promise 确实为用户提供了更好的机会以更有效和高效的方式阅读代码,尤其是在特定代码用于实现多个异步操作的情况下。

  • Promise 的好处
    1. 提高代码可读性
    2. 更好地处理异步操作
    3. 异步逻辑中更好的控制流定义
    4. 更好的错误处理
  • Promise 有四种状态:
    1. 完成:与承诺相关的操作成功
    2. 拒绝:与承诺相关的操作失败
    3. pending : Promise 仍处于未决状态,即尚未完成或拒绝
    4. 解决:承诺已履行或拒绝
  • 可以使用 Promise 构造函数创建一个 Promise。
    句法
var promise = new Promise(function(resolve, reject){
     //do something
});
  • 参数
    • Promise 构造函数只接受一个参数,即回调函数(该回调函数也称为匿名函数)。
    • 回调函数有两个参数, resolvereject
    • 在回调函数内部执行操作,如果一切顺利,则调用 resolve。
    • 如果所需的操作不顺利,则调用拒绝。

例子

Javascript
var promise = new Promise(function(resolve, reject) {
  const x = "geeksforgeeks";
  const y = "geeksforgeeks"
  if(x === y) {
    resolve();
  } else {
    reject();
  }
});
   
promise.
    then(function () {
        console.log('Success, You are a GEEK');
    }).
    catch(function () {
        console.log('Some error has occurred');
    });


Javascript
var promise = new Promise(function(resolve, reject) {
    resolve('Geeks For Geeks');
})
   
promise
    .then(function(successMessage) {
       //success handler function is invoked
        console.log(successMessage);
    }, function(errorMessage) {
        console.log(errorMessage);
    })


Javascript
var promise = new Promise(function(resolve, reject) {
    reject('Promise Rejected')
})
   
promise
    .then(function(successMessage) {
        console.log(successMessage);
    }, function(errorMessage) {
       //error handler function is invoked
        console.log(errorMessage);
    })


Javascript
var promise = new Promise(function(resolve, reject) {
    reject('Promise Rejected')
})
   
promise
    .then(function(successMessage) {
        console.log(successMessage);
    })
    .catch(function(errorMessage) {
       //error handler function is invoked
        console.log(errorMessage);
    });


Javascript
var promise = new Promise(function(resolve, reject) {
    throw new Error('Some error has occurred')
})
   
promise
    .then(function(successMessage) {
        console.log(successMessage);
    })
    .catch(function(errorMessage) {
       //error handler function is invoked
        console.log(errorMessage);
    });


输出:

Success, You are a GEEK

承诺消费者
可以通过使用.then.catch方法注册函数来使用 Promise。

1.然后()
then()在 promise 被解决或拒绝时被调用。它也可以定义为从承诺中获取数据并进一步成功执行的职业。

参数:
then()方法接受两个函数作为参数。

  1. 如果 promise 得到解决并收到结果,则执行第一个函数。
  2. 如果 promise 被拒绝并收到错误,则执行第二个函数。 (这是可选的,有更好的方法来使用.catch() 方法处理错误

句法:

.then(function(result){
        //handle success
    }, function(error){
        //handle error
    })

示例:承诺已解决

Javascript

var promise = new Promise(function(resolve, reject) {
    resolve('Geeks For Geeks');
})
   
promise
    .then(function(successMessage) {
       //success handler function is invoked
        console.log(successMessage);
    }, function(errorMessage) {
        console.log(errorMessage);
    })

输出:

Geeks For Geeks

示例:承诺被拒绝

Javascript

var promise = new Promise(function(resolve, reject) {
    reject('Promise Rejected')
})
   
promise
    .then(function(successMessage) {
        console.log(successMessage);
    }, function(errorMessage) {
       //error handler function is invoked
        console.log(errorMessage);
    })

输出:

Promise Rejected

2. 捕捉()

当一个 Promise 被拒绝或执行中发生错误时调用catch() 。每当在任何步骤都有可能出现错误时,它都被用作错误处理程序。

参数:
catch()方法接受一个函数作为参数。

  1. 处理错误或承诺拒绝的函数。(.catch() 方法内部调用 .then(null, errorHandler),即 .catch() 只是 .then(null, errorHandler) 的简写)

句法:

.catch(function(error){
        //handle error
    })

示例:承诺被拒绝

Javascript

var promise = new Promise(function(resolve, reject) {
    reject('Promise Rejected')
})
   
promise
    .then(function(successMessage) {
        console.log(successMessage);
    })
    .catch(function(errorMessage) {
       //error handler function is invoked
        console.log(errorMessage);
    });

输出:

Promise Rejected

示例:承诺被拒绝

Javascript

var promise = new Promise(function(resolve, reject) {
    throw new Error('Some error has occurred')
})
   
promise
    .then(function(successMessage) {
        console.log(successMessage);
    })
    .catch(function(errorMessage) {
       //error handler function is invoked
        console.log(errorMessage);
    });

输出:

Error: Some error has occurred

应用

  1. Promise 用于事件的异步处理。
  2. Promise 用于处理异步 http 请求。

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

JavaScript 以网页开发而闻名,但它也用于各种非浏览器环境。您可以按照这个 JavaScript 教程和 JavaScript 示例从头开始学习 JavaScript。