会发生什么:如果我使用fetch..catch并调用另一个函数。在下一个函数中,如果有什么崩溃。它将在最后一次捕获中被捕获。这将继续下去,如果下一个函数崩溃,它仍将被捕获在fetch..catch
中我想要的是什么:当我调用myExternalFunction()时,我想要断开'来自try..catch,fetch throws。
fetch('mystuff.url')
.then((data)=>{
myExternalFunction();
})
.catch((e)=>{
// all future errors will come here
})
myExternalFunction(){
// This error will be caught by fetch..catch
// we don't want that
crash();
}
答案 0 :(得分:2)
您不希望将<{1}} 链接到catch
,然后将它们保持在同一级别:
then
或者:
fetch(...).then(successCallback, failCallback)
const p = fetch(...);
p.then(successCallback);
p.catch(failCallback);
不同之处在于,const p = Promise.resolve('foo');
p.then(() => { throw new Error('noooooo') });
p.catch(() => console.error('caught'));
将fetch().then().catch()
catch
承诺或fetch
承诺产生的任何错误都会then
;而上述两种方法仅将failCallback
应用于fetch
承诺。
答案 1 :(得分:0)
当调用myExternalFunction()时,我想与'断开' try..catch fetch throws。
在crash
本身抓住myExternalFunction
的例外情况。
fetch('mystuff.url')
.then((data)=>{
myExternalFunction();
})
.catch((e)=>{
// all future errors will come here
})
function myExternalFunction(){
try
{
crash();
}
catch(e)
{
//do nothing
}
}
或(如果无法修改外部功能)catch
then
fetch('mystuff.url')
.then((data)=>{
try
{
myExternalFunction();
}
catch(e)
{
//do nothing
}
})
.catch((e)=>{
// all future errors will come here
})
function myExternalFunction(){
crash();
}
答案 2 :(得分:0)
如果我们不想在try..catch中包装'external function'(那么我们还需要继续包装下一个调用等等。例如,当使用与redux thunk的反应时,可以注意到这个问题。 fetch..catch如何捕获其他地方发生的错误。
为了完全打破我们需要其他东西作为setTimeout。必须是一个更好的方法。
fetch('mystuff.url')
.then((data)=>{
// this will break out so 'external function' doesn't get caught in catch.
setTimeout(myExternalFunction,1);
})
.catch((e)=>{
// only errors from the fetch
})
function myExternalFunction(){
crash(); // we are happy, it crashes without involving fetch
}
答案 3 :(得分:0)
如果您想在 fetch 中使用 catch ,我建议使用此解决方案。
fetch("http://httpstat.us/500")
.then(function(response) {
if (!response.ok) {
throw Error(response.status);
}
return response;
}).then(function(response) {
alert("ok");
}).catch(function(error) {
alert(error);
});