gpt4 book ai didi

javascript - 嵌套的 try、catch 和 async、await 请求

转载 作者:行者123 更新时间:2023-12-03 17:07:05 27 4
gpt4 key购买 nike

我正在尝试使用 fetch() 发出三个请求,每个请求都取决于前一个请求的结果。如果任何请求失败,我想抛出一个自定义错误。

这种模式有效,除非最里面的请求失败,它会抛出所有三个错误。如果中间请求失败,则会抛出中间错误和外部错误。

我该如何解决这个问题,以便它只从请求失败的级别抛出错误?有没有更好的方法来写这个?

async function requests() {
try {
let response1 = await fetch();
if (response1.ok) {
try {
let response2 = await fetch();
if (response2.ok) {
try {
let response3 = await fetch();
if (response3.ok) {
let jsonResponse3 = response3.json();
return jsonResponse3;
}
throw new Error('Request 3 failed');
} catch (error) {
console.log(error);
}
}
throw new Error('Request 2 failed');
} catch (error) {
console.log(error);
}
}
throw new Error('Request 1 failed');
} catch (error) {
console.log(error);
}
}

最佳答案

尝试这样的事情。

function dummyFetch() {
return new Promise(resolve => {
setTimeout(() => {
resolve({
ok: true
})
}, 500)
})
}

async function doAllSteps() {
const response1 = await dummyFetch()
if (!response1.ok) {
throw new Error('foo')
}

const response2 = await dummyFetch()
if (!response2.ok) {
throw new Error('foo')
}

const response3 = await dummyFetch()
if (!response3.ok) {
throw new Error('foo')
}

const response4 = await dummyFetch()
if (!response4.ok) {
throw new Error('foo')
}

return 'you did it!'
}

function go() {
return new Promise((resolve, reject) => {
try {
resolve(doAllSteps())
} catch (error) {
reject(error)
}
})
}

go().then((success) => {
console.log(success)
})

关于javascript - 嵌套的 try、catch 和 async、await 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48448855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com