JavaScript |承诺
Promise用于处理 JavaScript 中的异步操作。在处理多个异步操作时,它们很容易管理,其中回调可以创建回调地狱,导致无法管理的代码。
在使用 Promise 事件和回调函数之前,它们的功能有限并且创建了难以管理的代码。
多个回调函数会创建回调地狱,导致代码无法管理。此外,任何用户都不容易同时处理多个回调。
事件不擅长处理异步操作。
Promise 是以最简单的方式处理异步操作的理想选择。它们可以轻松处理多个异步操作,并提供比回调和事件更好的错误处理。换句话说,我们可以说,Promise 是同时处理多个回调的理想选择,从而避免了不受欢迎的回调地狱情况。 Promise 确实为用户提供了更好的机会以更有效和高效的方式阅读代码,尤其是在特定代码用于实现多个异步操作的情况下。
- Promise 的好处
- 提高代码可读性
- 更好地处理异步操作
- 异步逻辑中更好的控制流定义
- 更好的错误处理
- Promise 有四种状态:
- 已完成:与承诺相关的操作成功
- 拒绝:与承诺相关的操作失败
- pending : Promise 仍处于未决状态,即尚未完成或拒绝
- 已解决:承诺已履行或拒绝
- 可以使用 Promise 构造函数创建一个 Promise。
句法
var promise = new Promise(function(resolve, reject){
//do something
});
- 参数
- Promise 构造函数只接受一个参数,即回调函数(该回调函数也称为匿名函数)。
- 回调函数有两个参数, resolve和reject
- 在回调函数内部执行操作,如果一切顺利,则调用 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()方法接受两个函数作为参数。
- 如果 promise 得到解决并收到结果,则执行第一个函数。
- 如果 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()方法接受一个函数作为参数。
- 处理错误或承诺拒绝的函数。(.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
应用
- Promise 用于事件的异步处理。
- Promise 用于处理异步 http 请求。
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
JavaScript 以网页开发而闻名,但它也用于各种非浏览器环境。您可以按照这个 JavaScript 教程和 JavaScript 示例从头开始学习 JavaScript。