如何创建新的获取响应承诺?
How to create a new fetch Response promise?
我有一个类似于下面代码的函数 - 它生成一个 fetch
,在调用成功与否时执行操作,并且 return 承诺将在下游处理:
const myFunc = (): Response => {
return fetch('http://something')
.then(r => {
console.log('the call went through, the return code does not matter')
return r
})
.catch(err => {
console.error(`ah crap, the call failed completely: ${err}`)
// and here I do not know how to return a new Response
}
}
}
myFunc().then(r => {
console.log('do something once myFunc is over')
})
我的意图是在 myFunc
完成后 运行 一些代码,但我需要考虑调用完全失败的情况(无 DNS 解析、拒绝调用等)。为此,我需要在 catch()
中创建 return 一个 Response
承诺,例如,一个强制的 503
return 代码(这是不正确的因为服务器甚至没有回答,但无论如何)。
我的问题:如何创建这样的 Response
承诺?
我鼓励您不要将网络故障转变为明显的 HTTP 故障 (503),但由于您已经特别问如何做到这一点,你可以通过构建自己的 Response
object:
const myFunc = (): Response => {
return fetch("http://something")
.catch(err => {
console.error(`the call failed completely: ${err}`)
return new Response(null, {
status: 503,
statusText: "Fake 503",
});
});
};
或者如果您想使用 async
函数:
const myFunc = async (): Response => {
try {
return await fetch("http://something");
} catch (err) {
console.error(`the call failed completely: ${err}`)
return new Response(null, {
status: 503,
statusText: "Fake 503",
});
}
};
(请注意,第一个中不需要您的 .then
(除非您想执行 console.log
)。)
但是,我强烈建议您不要这样做。相反,通过 .finally
处理程序(或 async
函数中的 try
/finally
块在调用时处理此问题。
我有一个类似于下面代码的函数 - 它生成一个 fetch
,在调用成功与否时执行操作,并且 return 承诺将在下游处理:
const myFunc = (): Response => {
return fetch('http://something')
.then(r => {
console.log('the call went through, the return code does not matter')
return r
})
.catch(err => {
console.error(`ah crap, the call failed completely: ${err}`)
// and here I do not know how to return a new Response
}
}
}
myFunc().then(r => {
console.log('do something once myFunc is over')
})
我的意图是在 myFunc
完成后 运行 一些代码,但我需要考虑调用完全失败的情况(无 DNS 解析、拒绝调用等)。为此,我需要在 catch()
中创建 return 一个 Response
承诺,例如,一个强制的 503
return 代码(这是不正确的因为服务器甚至没有回答,但无论如何)。
我的问题:如何创建这样的 Response
承诺?
我鼓励您不要将网络故障转变为明显的 HTTP 故障 (503),但由于您已经特别问如何做到这一点,你可以通过构建自己的 Response
object:
const myFunc = (): Response => {
return fetch("http://something")
.catch(err => {
console.error(`the call failed completely: ${err}`)
return new Response(null, {
status: 503,
statusText: "Fake 503",
});
});
};
或者如果您想使用 async
函数:
const myFunc = async (): Response => {
try {
return await fetch("http://something");
} catch (err) {
console.error(`the call failed completely: ${err}`)
return new Response(null, {
status: 503,
statusText: "Fake 503",
});
}
};
(请注意,第一个中不需要您的 .then
(除非您想执行 console.log
)。)
但是,我强烈建议您不要这样做。相反,通过 .finally
处理程序(或 async
函数中的 try
/finally
块在调用时处理此问题。