Асинхронные и ожидающие функции выполняются раньше других - PullRequest
0 голосов
/ 05 февраля 2019

Моя proccess функция ожидания не ждет конца preProccess:

У меня есть класс маршрута, который вызывает контроллер

exports.Controller = async function (req, res) {

let callbackPreProccess = await Implementation.preProccess(payload, resolve);

let callbackProccess = await Implementation.proccess(callbackPreProccess, resolve);
res.status(200).json(callbackProccess);

//

export class Implementation{

    preProccess(payload: any, resolve: string): Promise<any> {
        return new Promise(async (resolve, reject) => {
            try {
               if (payload.test == true){
                    logger.info('preProccess OK');
               }

               //preProccess connect to the DB and get some informations,
               //enrich the payload and return
               logger.info('preProccess DB access OK');

               resolve(payload);

           }
           catch(error){
               throw new Error("Manual Error");
               reject(error);
           }
    };


    proccess(payload: any, resolve: string): Promise<any> {
        return new Promise(async (resolve, reject) => {
            try {
                logger.info('proccess OK');

                resolve(true);
            }
            catch(error){
                reject(error);
            }
    };
}

Как все функции ожиданияя ожидаю:

info&& 'preProccess OK'
info&& 'preProccess DB access OK'
info&& 'proccess OK'

Но вернитесь ко мне:

info&& 'preProccess OK'
info&& 'proccess OK'
info&& 'preProccess DB access OK'

Даже когда я выдуваю ошибку throw, ожидая, что не запускается процесс, они запускают

info&& 'preProccess OK'
info&& 'proccess OK'
error&& 'Manual error'

Но когда я использую контроллер .then на proccess, ожидая вручную preProccess, он работает очень хорошо.

1 Ответ

0 голосов
/ 05 февраля 2019

используйте await при создании нового процесса.

 return await new Promise(async (resolve, reject) => {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...