Javascript 如何处理返回404状态的承诺?
我有一个方法,它使用node fetch进行POST调用,通过API更新表中的概要文件对象。如果提供了无效的profileId(状态404),承诺仍会解决。最好的处理方法是什么,这样我只能接受状态200?该方法定义为:Javascript 如何处理返回404状态的承诺?,javascript,node.js,Javascript,Node.js,我有一个方法,它使用node fetch进行POST调用,通过API更新表中的概要文件对象。如果提供了无效的profileId(状态404),承诺仍会解决。最好的处理方法是什么,这样我只能接受状态200?该方法定义为: async function updateUserProfileSocketId(profileId, socketId) { const body = { id: profileId, socketId }; try { const respon
async function updateUserProfileSocketId(profileId, socketId) {
const body = { id: profileId, socketId };
try {
const response = await fetch(`${API_URL}/updateUserProfile`, {
method: 'post',
body: JSON.stringify(body),
headers: { 'Content-Type': 'application/json' },
});
if (response.status !== 200) {
throw new Error(response.status);
}
} catch (err) {
console.log(`updateUserProfileSocketId Error: ${err}`);
}
}
在服务类中调用该方法,如下所示:
onInit(socket) {
socket.on('init', (profile) => {
Promise.resolve(updateUserProfileSocketId(profile.id, socket.id))
.then((response) => {
if (response === null || response === undefined) {
console.log(`Unable to find profile ${profile.id}`);
socket.conn.close();
} else {
users.push(profile.id);
}
})
.catch((err) => {
console.log(err);
});
});
}
这似乎有效,但我不确定这是否是最好的处理方法。有什么想法吗?如果响应状态不是200,则抛出一个异常,该异常将立即再次被捕获。这可能不是你想要的。您可以出于日志记录的目的保留catch块,但应重新显示异常:
async function updateUserProfileSocketId(profileId, socketId) {
const body = { id: profileId, socketId };
try {
const response = await fetch(...);
if (response.status !== 200) {
throw new Error(response.status);
}
} catch (err) {
console.log(`updateUserProfileSocketId Error: ${err}`);
throw err;
}
}
同样的事情也适用于套接字回调中的catch处理程序。
但是,删除try/catch/log/rethrow逻辑并集中处理异常会更干净。删除捕获是个好主意。。否则,您已经吞并了异常。再次抛出它不意味着它只在终端上出现两次吗?更重要的是,抛接球不是一种坏习惯吗?没错,我只是想指出,如果你想保留try/cacht的球,该怎么办。另请注意,有些情况下这很好,请参阅以下有趣的帖子: