Получение нескольких обратных вызовов IPC от одного вызова IPC - PullRequest
1 голос
/ 22 апреля 2019

Main:

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 нужно только один раз. Что может быть причиной этого?

1 Ответ

1 голос
/ 22 апреля 2019

Вы подключаете новый обработчик событий для botCheckLoginReturn каждый раз, когда нажимаете кнопку. Этот список обработчиков событий расширяется каждый раз, когда вы нажимаете кнопку. Каждый из этого растущего списка обработчиков событий затем вызывается для события.

Убедитесь, что следующее выполняется только «один раз»:

IPC.on('botCheckLoginReturn', (event: Electron.IpcMessageEvent, response: any) => {
    console.log(response);
    // ...
});

Это означает, что выведите его из кода, вызываемого при нажатии кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...