Мне нужно запросить продукты X с другого сервера, и мне нужно дождаться завершения этого выполнения, прежде чем продолжить и сохранить заказ в базе данных.
Допустим, я получил по почте массив идентификаторов продуктов, которые мне нужно добавить в заказ, например,
JSON FILE:
{
"order_products":[1,2,3,4]
}
Вот пример кода:
//Express module
var router = require('express').Router();
//HTTP Request module
var client = require('request');
//Util that saves the URLs of the other databases
var productURL = require('../utils/product/productURL');
//Builds a product object given a JSON
var productBuilder = require('../utils/product/productBuilder');
router.post('/', req, res) {
//Instantiate a new order
var orderInstance = new order({
date: Date.now
});
//Query the products in the other server and add them to the order
req.body.order_products.forEach(id => {
client.get(productURL.HTTPS + id, { json: true }, (err, res, JSONProduct) => {
var product = productBuilder.build(JSONProduct);
orderInstance.order_products.push(product);
});
};
//Save the order in the database
orderInstance.save(....);
//Send response
res.status(201).json(orderInstance);
}
Проблема здесь в том, что, пока цикл все еще выполняется, ответ отправляется (201), и orderInstance сохраняется без какого-либо продукта. Если я консоль.log продукты, они появляются только после сохранения orderInstance.
Я пытался реализовать обратные вызовы, чтобы исправить эту проблему, но безуспешно. Буду признателен, если кто-нибудь сможет мне помочь! Заранее спасибо: smiley: (отредактировано)