📅  最后修改于: 2023-12-03 15:01:48.002000             🧑  作者: Mango
JavaScript中的承诺(Promise)是一种处理异步操作的方法。它允许您按照顺序执行代码,而无需等待其它代码告诉您它们已经完成。这使得异步代码更加易于编写和理解。
在JavaScript中创建一个承诺可以使用Promise构造函数。构造函数接受一个回调函数,该回调函数包含两个参数:resolve和reject。resolve函数表示异步操作已成功完成,而reject函数表示操作已失败。
const myPromise = new Promise((resolve, reject) => {
// 异步代码
if (operationSuccessful) {
resolve("操作成功!");
} else {
reject("操作失败 :(");
}
});
承诺一旦被创建,可以通过then()方法来执行它。这个方法接受一个回调函数,该回调函数包含一个参数,该参数是异步操作返回的结果。如果操作成功,则then()方法的回调函数将被执行,并且将操作结果传递给它;如果操作失败,则将调用.catch()方法的回调函数,该函数将传递失败原因。
myPromise.then((result) => {
console.log(result); // "操作成功!"
}).catch((error) => {
console.error(error); // "操作失败 :("
});
由于.then()方法返回的是一个承诺,因此可以链式调用多个then()方法来处理异步操作的结果。
myPromise.then((result) => {
console.log(result); // "操作成功!"
return "结果已处理。";
}).then((result) => {
console.log(result); // "结果已处理。"
}).catch((error) => {
console.error(error); // "操作失败 :("
});
如果需要同时执行多个异步操作,则可以将Promise.all()方法用于所有承诺的数组。当所有承诺都成功返回时,该方法的回调函数将被执行,并将所有结果传递给它;如果任何承诺失败,则将调用.catch()方法的回调函数。
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("第一个操作成功!");
}, 1000); // 一秒钟后解决
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("第二个操作成功!");
}, 2000); // 两秒钟后解决
});
Promise.all([promise1, promise2])
.then((results) => {
console.log(results); // ["第一个操作成功!", "第二个操作成功!"]
})
.catch((error) => {
console.error(error);
});
承诺是JavaScript中优雅处理异步代码的一种方式。它使代码更加简洁和易于理解,并允许您按顺序执行代码,而无需等待异步操作完成。无论是单个异步操作还是多个并行操作,承诺都是一种强大和灵活的工具。