Promise是JavaScript中处理异步操作的一种机制,通过Promise可以更好地处理回调地狱(callback hell)和提供更为清晰的异步代码结构。以下是一些Promise的高级用法:
通过返回新的Promise,可以使多个异步操作按顺序串联起来:
function asyncTask1() { return new Promise(resolve => { setTimeout(() => { console.log("Task 1"); resolve("Task 1 result"); }, 1000); }); } function asyncTask2(data) { return new Promise(resolve => { setTimeout(() => { console.log("Task 2 with data:", data); resolve("Task 2 result"); }, 1000); }); } asyncTask1() .then(result => asyncTask2(result)) .then(finalResult => console.log("Final result:", finalResult)) .catch(error => console.error(error));
Promise.all()接收一个Promise数组,当所有的Promise都被成功解析后,返回一个新的Promise:
Promise.all()
const promise1 = Promise.resolve("Promise 1"); const promise2 = new Promise(resolve => setTimeout(() => resolve("Promise 2"), 1000)); const promise3 = Promise.reject("Promise 3"); Promise.all([promise1, promise2]) .then(results => console.log(results)) .catch(error => console.error(error)); // Output after 1 second: ["Promise 1", "Promise 2"]
Promise.race()接收一个Promise数组,当其中任何一个Promise被解析或拒绝后,返回一个新的Promise:
Promise.race()
const promise1 = new Promise(resolve => setTimeout(() => resolve("Promise 1"), 1000)); const promise2 = new Promise(resolve => setTimeout(() => resolve("Promise 2"), 500)); Promise.race([promise1, promise2]) .then(result => console.log(result)) .catch(error => console.error(error)); // Output after 500 milliseconds: "Promise 2"
Promise.any()接收一个Promise数组,当其中任何一个Promise被解析后,返回一个新的Promise:
Promise.any()
const promise1 = new Promise((resolve, reject) => setTimeout(() => reject("Promise 1"), 1000)); const promise2 = new Promise(resolve => setTimeout(() => resolve("Promise 2"), 500)); Promise.any([promise1, promise2]) .then(result => console.log(result)) .catch(errors => console.error(errors)); // Output after 500 milliseconds: "Promise 2"
finally()方法在Promise被解析或拒绝后都会执行,无论Promise的状态如何,都能够执行一些清理操作:
finally()
asyncTask1() .then(result => asyncTask2(result)) .catch(error => console.error(error)) .finally(() => console.log("Cleanup")); // Output after both tasks complete: "Cleanup"
这些高级用法能够更加灵活地处理异步操作,使代码更为清晰和可维护。
原文链接:codingdict.net