2016-06-22 5 views
1

У меня есть четыре задачи, которые работают синхронно.async task in node.js

Это выглядит следующим образом:

function createEntity(req, res, next) { 
    validator.validateInternalProductRequest(req.body) 
     .then((data) => feedbackSetting.getUrl(data)) 
     .then((data) => bitlyService.shortenLink(data)) 
     .then((data) => internalProductService.saveInternalProductRequest(data)) 
     .then((data) => res.send(data)) 
     .catch(err => { 
     console.log(err); 
     next(err) 
     }); 
    } 

В настоящее время между 3-ем и 4-й задачей, то есть после получения короткой ссылки и перед сохранением в базу данных, мне нужно, чтобы выполнить задачу, позволяет сказать, что задача, как что мне нужно для асинхронного запуска. Из-за этого 4-я задача, то есть сохранение в базе данных не должно быть заблокировано.

Теперь эта задача AS, что я должен делать асинхронна, имеет еще более три задачи: 1. получение настроек из БДА 2. делают локоны просьбы об 3. сохранении в базе данных

Этих три задач я могу делать с использованием async.waterfall или я надеюсь, что будут какие-то альтернативы этому?

Как выполнить эту задачу AS в вышеупомянутой функции createEntity?

+0

Непонятно, с чем именно вы обращаетесь за помощью. Кажется, вы просто поставили эти три задачи в свою собственную функцию и вставляли эту функцию в свою цепочку вызовов, где вы хотите, чтобы это произошло. Если вы хотите, чтобы остальная часть кода дождалась завершения этих трех задач, вы возвращаете обещание от своей функции, которая не разрешается, пока ваша задача AS не будет выполнена. Если вы не хотите, чтобы они подождали, то либо не вернетесь, либо разрешите обещание. – jfriend00

+0

Я не хочу, чтобы остальная часть кода дождалась этих трех задач. – nirvair

+0

Итак, просто поместите этот код в функцию и вызовите эту функцию, где бы вы ни захотели в последовательности. Это кажется настолько простым, что я не понимаю, о чем вы смущены? – jfriend00

ответ

1

Если вы не хотите ждать асинхронной задачи, просто вызовите ее и не ждите ее. Это легко.

function createEntity(req, res, next) { 
    validator.validateInternalProductRequest(req.body) 
     .then((data) => feedbackSetting.getUrl(data)) 
     .then((data) => { 
      callSomeAsyncMethodAndDontWaitForResult(); 
      return bitlyService.shortenLink(data) 
     }).then((data) => internalProductService.saveInternalProductRequest(data)) 
     .then((data) => res.send(data)) 
     .catch(err => { 
     console.log(err); 
     next(err) 
     }); 
    }