NodeJS child_process или nextTick или setTimeout для долгого ожидания задачи? - PullRequest
0 голосов
/ 28 марта 2019

Я видел несколько вопросов о немедленной отправке ответа и выполнении задач с интенсивным использованием процессора .

В моем случае это приложение для моего узла зависит от ответов службы сторонних производителей , поэтому поток процесса равен

  1. Узел получает запрос и проходит проверку подлинности с помощью стороннего поставщика.service
  2. Отправка ответа пользователю после аутентификации
  3. Выполнение некоторых задач, требующих ответов от стороннего сервиса
  4. Сохранение результатов в базе данных

В моем случае нет ресурсоемких задач и нет необходимости предоставлять результаты дополнительных задач пользователю, но узлу нужно ждать ответов от сторонней службы.Мне нужно выполнить несколько запросов / ответов в / из сторонней службы после проверки подлинности, чтобы завершить задачу.

Как мне решить эту ситуацию?

Я видел некоторые обходные пути с child_process, nextTick и setTimeOut.

В конечном итоге я хочу немедленно отправить ответ пользователю и выполнить задачи, связанные с этим пользователем.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 28 марта 2019
elsewhere in your code
function do_some_tasks() { //... }

// route function
(req, res) => {
  // call some async task
  do_some_tasks()
  // if the above is doing some asynchronous task, next function should be called immediately without waiting, question is is it so?
  res.send()
}

// if your do_some_tasks() is synchronous func, the you can do
// this function call will be put to queue and executed asynchronously
setImmediate(() => {
  do_some_tasks()
})
// this will be called in the current iteration
res.send(something)
0 голосов
/ 28 марта 2019

Просто напишите очень общий блок кода здесь:

var do_some_tasks = (req, tp_response) => {
    third_party_tasks(args, (err, result)=<{
        //save to DB
    });
}

var your_request_handler = (req,res) => {
    third_party_auth(args, (tp_response)=>{
        res.send();
        //just do your tasks here
        do_some_tasks(req, tp_response);
    });
}
...