📅  最后修改于: 2023-12-03 15:10:42.713000             🧑  作者: Mango
在编写程序时,往往需要同时发出多个请求,并等待它们全部返回。为了解决这个问题,可以使用柏树(Promise)来进行异步操作。
柏树是一种异步编程解决方案。它可以避免“回调地狱”,提供了一个更加优雅的方式处理异步操作。
首先,我们需要使用 Promise.all 方法来等待多个请求。Promise.all 接收一个 Promise 数组作为参数,并返回一个 Promise 对象,当所有 Promise 都 resolve(或其中一个 Promise reject)后,返回一个 resolved Promise 数组。
Promise.all([
fetch('/api/data1'),
fetch('/api/data2'),
fetch('/api/data3')
])
.then((values) => {
console.log(values[0]);
console.log(values[1]);
console.log(values[2]);
})
.catch((error) => {
console.log(error);
});
在这个例子中,我们向三个不同的接口发送请求,并在所有请求完成后打印它们的响应内容。
有时候,我们需要自定义一些 Promise,以便更好地适应我们的需求。我们可以使用 Promise 构造函数来创建一个自定义 Promise。
function fetchData(url) {
return new Promise((resolve, reject) => {
fetch(url)
.then((response) => {
resolve(response.json());
})
.catch((error) => {
reject(error);
});
});
}
Promise.all([
fetchData('/api/data1'),
fetchData('/api/data2'),
fetchData('/api/data3')
])
.then((values) => {
console.log(values[0]);
console.log(values[1]);
console.log(values[2]);
})
.catch((error) => {
console.log(error);
});
在这个例子中,我们封装了一个 fetchData 函数,用于发送请求并返回一个 Promise。然后,我们使用这个函数来创建三个自定义 Promise,并使用 Promise.all 等待所有请求完成后打印响应内容。
除了使用 Promise.all,我们还可以通过柏树链式调用来处理多个请求。这种方式更加灵活,可以使我们更好地处理多个异步操作。
fetch('/api/data1')
.then((response) => {
// 处理 response
return fetch('/api/data2');
})
.then((response) => {
// 处理 response
return fetch('/api/data3');
})
.then((response) => {
// 处理 response
})
.catch((error) => {
console.log(error);
});
在这个例子中,我们依次发送三个请求,并通过柏树链式调用来处理它们的响应。如果其中任何一个请求失败,都会跳转到 catch 的处理方法。
柏树是一种强大的异步编程解决方案,能够帮助编写更加优雅的异步代码。通过 Promise.all 和柏树链式调用,我们可以很容易地处理多个异步操作。