异步和等待功能先于其他运行

时间:2019-02-05 13:04:06

标签: javascript async-await

我的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'

即使当我强制抛出错误时,如果期望不运行过程,它们也会运行

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

但是当我在.then控制器上使用proccess时,手动等待preProccess时,它工作得很好。

1 个答案:

答案 0 :(得分:1)

在创建新进程时使用await。

 return await new Promise(async (resolve, reject) => {