Задержка RES.REDIRECT до тех пор, пока не будут выполнены функции?Или ОБНОВИТЬ страницу, когда завершено? - PullRequest
0 голосов
/ 02 апреля 2019

Мне нужно 'задерживать' res.redirect ('/ foo') до тех пор, пока некоторые функции не выполнят свои задачи, и мне нужна ваша помощь, пожалуйста.

Страница / foo заполняется из БД. Когда пользователь завершил транзакцию, мне нужно обработать записи, а затем удалить записи и, наконец, «перезагрузить» / foo для теперь пустой БД (готовой к новому вводу, поэтому пустой)

Когда он сидит, / foo загружается с текущими данными (если он будет ждать, пока doThis и затемThisCallback завершат работу, у него не будет данных для отображения, что я и пытаюсь найти).

Могу ли я выполнить «обновление страницы» из последней функции после ее завершения? Вроде как location.reload () или window.location.href = '/ foo'. (Я пытался, и Node не нравились мои попытки).

app.get('/foo/bar/:aparam', function(req, res) {
    doThis(a, thenThisCallback)

    // Dont redirect until 'thenThisCallback' is finished
    res.redirect('/foo');
})

Я хотел бы «обновить» или перенаправить «по требованию», когда моя последняя функция завершится, и я знаю, что база данных очищена от данных с истекшим сроком действия. В настоящее время Node не заботится о том, что моя операция удаления завершена:)

Может быть, я мог бы опустить res.redirect ('/ foo') в маршруте и выполнить GET вызов / foo в конечной функции? Если это возможно, то как?

1 Ответ

0 голосов
/ 03 апреля 2019

Вы можете изменить возвращаемое значение функции doThis, чтобы она возвращала функцию обратного вызова и эту функцию обратного вызова для возврата Promise<void>. Делая это, вы можете выполнить цепочку операций после разрешения этой функции.

// I'm not 100% sure about the parameters
const promisedCallback = (...params) => {
    return new Promise((resolve, reject) => {
        thenThisCallback(...params);
        resolve();
    });
};

app.get('/foo/bar/:aparam', function(req, res) {
    doThis(a, promisedCallback)
        .then(() => {
            res.redirect('/foo');
        });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...