我有一小段代码,它手动获取复选框的值,并通过socket io发出。问题是,如果我注释掉payload.permission.subscriptionPlans.push(item.value);
,它工作得很好,但如果我取消注释,socket.emit仍然会运行,我仍然会获得服务器端需要的所有数据,没有任何错误,但它不会运行回调函数。代码如下:
let payload = {
permission: {},
};
payload.permission.subscriptionPlans = [];
document.querySelectorAll(".form-add-sub-plan:checked").forEach((item) => {
console.log(item.value); // this still works
payload.permission.subscriptionPlans.push(item.value); // problem here
});
socket.emit("admin/manage-permission/create", payload, (res) => {
let addModal = bootstrap.Modal.getOrCreateInstance(document.getElementById("add-permission-modal"));
addModal.hide();
table.reload();
table.displayMessage(res.payload.type, res.payload.message);
});
// server code
socket.on("admin/manage-permission/create", async(req, done) => {
try {
if (await Permission.exists({
url: req.permission.url
})) {
return done(
new SocketPayload("error", 409, {
type: "danger",
message: "Url already exists",
})
);
}
let newPermission = new Permission(req.permission);
// console.log(newPermission);
await newPermission.save();
return done(
new SocketPayload("success", 200, {
type: "success",
message: "New permission was added",
})
);
} catch (e) {
console.log(e);
return done(
new SocketPayload("error", 500, {
type: "danger",
message: "An error occured",
})
);
}
});
你知道为什么会发生这种情况吗?编辑:添加了服务器代码,如果有人想知道
发布于 2021-07-20 17:03:26
事实证明,这是mongoose中间件停止套接字以返回回调。我花了一段时间才弄明白,因为服务器没有抛出任何错误。
https://stackoverflow.com/questions/68457967
复制相似问题