Как сохранить данные для нескольких циклов? - PullRequest
0 голосов
/ 09 марта 2019

В запросе Post я хочу получить данные objectId и сохранить их в базе данных.Будет 2 или 3 идентификатора объекта, которые я буду получать в массиве.Из этого массива я могу извлечь данные с отдельными циклами for, но в конце я не могу сохранить данные.Я хочу знать, как переместить данные из одного массива в другой или напрямую сохранить данные.

Схема: -

const jobSch = new Schema({
    token : {type:Number},
    name : {type:String},
    phoneNumber: {type:Number},
    gender : {type:String},
    stage : {type:String},
    categoryId : [Schema.Types.ObjectId],
    subCategoryId : [Schema.Types.ObjectId],
    serviceId : [Schema.Types.ObjectId],
    category : [String],
    subcategory : [String],
    service: [String],
    paymenttype: [String],
    tax: {type:Number},
    totalprice: {type:String},
    servicePerson: {type:String},
    createdOn : {type:Date, default:new Date()},
    updatedOn : {type:Date, default:new Date()}   
});

Код запроса POST: -

router.post('/', async (req, res) => {
    let ids = req.body;
    let catId = ids.categoryId;
    console.log("catId", catId)
    console.log("catId.length", catId.length)
    let subcatId = ids.subCategoryId;
    console.log("subcatId", subcatId);
    console.log("subcatId.length", subcatId.length)
    let serId = ids.serviceId;
    console.log("serId", serId);
    console.log("subcatId.length", serId.length)
    let job = new Job(ids);
    let catgy=[];
    let subcatgy=[];
    let subser=[];

    for (i = 0; i < catId.length; i++) {
        Category.findById(catId[i])
            .then(category => {
                if (category && category != null) {
                    console.log('category.name', category.name);
                    catgy.push(`${category.name}`)
                    console.log(catgy);

                }
            })
    }
    for (i = 0; i < subcatId.length; i++) {
        Service.findById(subcatId[i])
            .then(service => {
                if (service && service != null) {
                    console.log('service.name', service.name);
                    subcatgy.push(`${service.name}`)
                    console.log(subcatgy);

                }
            })
    }
    for (i = 0; i < serId.length; i++) {
        Subservice.findById(serId[i])
            .then(subService => {
                if (subService && subService != null) {
                    console.log('subservice.name', subService.subService);
                    subser.push(`${subService.subService}`)
                  console.log(subser);
                }
            })
    }
    var category = catgy.slice();
    console.log("category1", category)
    var service = subcatgy.slice();
    console.log('service2', service);
    var subService = subser.slice();
    console.log('subService3',subService);
    console.log(job);
    job.save().then(job => {
        res.status(201).json({
            message: 'Job saved successfully', job
        })
    }).catch(err => console.log(err));
});

1 Ответ

1 голос
/ 09 марта 2019

Проблема в том, что функция обратного вызова разрешенных обещаний (findById) выполняется асинхронно.Попробуйте проверить это , думаю, это поможет вам.

...