NodeJS 如何在Javascript中处理多个Axios调用?

qvtsj1bj  于 2023-01-12  发布在  Node.js
关注(0)|答案(1)|浏览(163)

我正在构建一个应用程序,在这个应用程序中,我使用axios.all函数同时从前端向后端发送3个axios调用,这些函数在MONGO DB数据库中进行更改。但问题是,我希望以这样一种方式发送这些axios请求,即要么所有3个请求都成功发出,要么如果3个请求中的任何一个失败,则不应发出其他请求调用。我如何在javascript中做到这一点?

let one = "request link 1";
let two = "request link 2";
let three = "request link 3";

const requestOne = axios.post(one, newInventory);
const requestTwo = axios.post(two, element);

const requestThree = axios.post(three, newObj);
axios.all([requestOne,requestTwo,requestThree]).then(axios.spread((...response)=>{
    alert("changes are made successfully");
    window.location.reload();
})).catch(err=>{
    alert("Some error has occured", err);
})

下面是代码。我正在发出3个请求(requestOne、requestTwo、requestThree)。让我们考虑这样一种情况:requestOne由于某种原因失败,而requestTwo和requestThree成功。这就是我想要防止的。如果任何一个请求失败,我想要恢复所有其他成功请求所做的更改。我想要所有请求都成功,或者所有请求都失败。

lztngnrs

lztngnrs1#

axios.allaxios.spread已经被弃用,这在他们的GitHub页面上也有提及。https://github.com/axios/axios#concurrency-deprecated。因此,由于它已被弃用,请改用Promise.all。以下是实现了Promise.all的代码

let one = "request link 1";
let two = "request link 2";
let three = "request link 3";

const requestOne = axios.post(one, newInventory);
const requestTwo = axios.post(two, element);
const requestThree = axios.post(three, newObj);

Promise.all([requestOne,requestTwo,requestThree]).then((res)=>{
    alert("changes are made successfully");
    window.location.reload();
})).catch(err=>{
    alert("Some error has occured", err);
})

如果任何承诺被拒绝,则只返回错误,否则将返回所有承诺的响应。但是,拒绝任何承诺不会停止其他承诺的请求,因为请求在Promise.all中并发触发。

相关问题