从单个 IPC 调用获取多个 IPC 回调
Getting Multiple IPC callbacks From Single IPC Call
主要:
ipcMain.on('botCheckLogin', (event: Electron.IpcMessageEvent, token: string) => {
axios.post('https://www.google.com/recaptcha/api/siteverify' +
'?secret=serverSecret=' + token)
.then(function(response) {
console.log(response);
event.sender.send('botCheckLoginReturn', 'hi');
})
.catch(function(error) {
console.log(error);
event.sender.send('botCheckLoginReturn', 'world');
});
});
渲染:
submitForm() {
if ((this.$refs.form as LoginForm).validate()) {
this.$recaptcha('login').then((token) => {
console.log('sending token!');
IPC.send('botCheckLogin', token);
});
IPC.on('botCheckLoginReturn', (event: Electron.IpcMessageEvent, response: any) => {
console.log(response);
return;
const loginPacket: LoginPacket = {
userName: (this as LoginForm).userName,
displayName: (this as LoginForm).displayName,
password: (this as LoginForm).loginPassword,
email: (this as LoginForm).email,
};
if (!(this as LoginVar).isRegister) {
IPC.send('login', loginPacket);
} else {
IPC.send('register', loginPacket);
}
});
}
}
函数submitForm
被按钮调用。我点击了那个按钮 4 次,等待 MAIN 进程响应,然后再次点击,这就是我在控制台上得到的:
sending token!
hi
sending token!
(2x) hi
sending token!
(3x) hi
sending token!
(4x) hi
sending token
文本是在按下按钮时记录的,hi
是从 MAIN 进程返回的文本。它应该只返回 hi
一次。可能是什么原因造成的?
每次单击按钮时,您都会为 botCheckLoginReturn
附加一个新的事件处理程序。每次单击按钮时,都会扩展此事件处理程序列表。然后在事件发生时调用这个不断增长的事件处理程序列表中的每一个。
确保仅执行以下 "once":
IPC.on('botCheckLoginReturn', (event: Electron.IpcMessageEvent, response: any) => {
console.log(response);
// ...
});
也就是说,将它移出按下按钮时调用的代码。
主要:
ipcMain.on('botCheckLogin', (event: Electron.IpcMessageEvent, token: string) => {
axios.post('https://www.google.com/recaptcha/api/siteverify' +
'?secret=serverSecret=' + token)
.then(function(response) {
console.log(response);
event.sender.send('botCheckLoginReturn', 'hi');
})
.catch(function(error) {
console.log(error);
event.sender.send('botCheckLoginReturn', 'world');
});
});
渲染:
submitForm() {
if ((this.$refs.form as LoginForm).validate()) {
this.$recaptcha('login').then((token) => {
console.log('sending token!');
IPC.send('botCheckLogin', token);
});
IPC.on('botCheckLoginReturn', (event: Electron.IpcMessageEvent, response: any) => {
console.log(response);
return;
const loginPacket: LoginPacket = {
userName: (this as LoginForm).userName,
displayName: (this as LoginForm).displayName,
password: (this as LoginForm).loginPassword,
email: (this as LoginForm).email,
};
if (!(this as LoginVar).isRegister) {
IPC.send('login', loginPacket);
} else {
IPC.send('register', loginPacket);
}
});
}
}
函数submitForm
被按钮调用。我点击了那个按钮 4 次,等待 MAIN 进程响应,然后再次点击,这就是我在控制台上得到的:
sending token!
hi
sending token!
(2x) hi
sending token!
(3x) hi
sending token!
(4x) hi
sending token
文本是在按下按钮时记录的,hi
是从 MAIN 进程返回的文本。它应该只返回 hi
一次。可能是什么原因造成的?
每次单击按钮时,您都会为 botCheckLoginReturn
附加一个新的事件处理程序。每次单击按钮时,都会扩展此事件处理程序列表。然后在事件发生时调用这个不断增长的事件处理程序列表中的每一个。
确保仅执行以下 "once":
IPC.on('botCheckLoginReturn', (event: Electron.IpcMessageEvent, response: any) => {
console.log(response);
// ...
});
也就是说,将它移出按下按钮时调用的代码。