Marround
@Marround
Программист, администратор, хороший человек

Как вернуть данные полученные из колбэк функции?

Есть сервис который работает с базой, и возвращает в контроллер результат своей работы... внутри ODM mongoose в которой есть асинхронный метод save который принимает в качестве аргументов по мимо прочего коллбэк функцию, в котоорой я обрабатываю результат сохранения генеррирую нужный мне ответ !!! и вот в этот момент возникает вопрос КАК мне получить результат этой работы коллбэк функции????

async createService(createService: ServicesDto): Promise<ServicesOutsideDto> {
        try {
            const createdService = new this.servicesModel(createService);

            let res: IServices;

            createdService.save(async(err) => {
                try {
                    if(!err) {
                        return await this.servicesModel.findOne({'_id': createdService._id}).populate('banner').exec();
                    }else throw err;
                }catch (error) {
                    throw error;
                }
            }).then((data) => {
                res = data;
            });

            return plainToClass<ServicesOutsideDto, object>(
                ServicesOutsideDto,
                res.toObject(),
                {excludePrefixes: ["_"]}
            );
        }catch (error) {
            if(error && error.name === 'ValidationError'){
                throw new BadRequestException(error);
            } else throw error;
        }
    }
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
panarama360
@panarama360
Как то так:
async createService(createService: ServicesDto): Promise<ServicesOutsideDto> {
        try {
            const createdService = new this.servicesModel(createService);


            let res: IServices = await new Promise((resolve, reject)=>{
                createdService.save(async(err) => {
                    try {
                        if(!err) {
                            resolve(this.servicesModel.findOne({'_id': createdService._id}).populate('banner').exec());
                        }else throw err;
                    }catch (error) {
                        reject(error)
                    }
                })
            })
            return plainToClass<ServicesOutsideDto, object>(
                ServicesOutsideDto,
                res.toObject(),
                {excludePrefixes: ["_"]}
            );
        }catch (error) {
            if(error && error.name === 'ValidationError'){
                throw new BadRequestException(error);
            } else throw error;
        }
    }


Надеюсь не поздно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы