я пытаюсь выполнять обещания в NodeJS с запросами mongodb.
Библиотека Mongo - это mongod, я думаю, что она возвращает обещания.
Это мой код:
var dbOrders = mongo(db.serverConfig.name + "/" + db.databaseName, ['orders']);
var dbClients = mongo(db.serverConfig.name + "/" + db.databaseName, ['clients']);
var promise;
if (order.Order.Nif === "") {
var newClient = {
name: order.Order.Asegurado,
ni: order.Order.Nif,//Never used..
address: order.Order.Direccion,
city: order.Order.Poblacion,
province: order.Order.Provincia,
phone: order.Order.Telefonos,
cp: order.Order.CodigoPostal
};
promise = dbClients.clients.insert(newClient).then(function (currentClient) {
log.debug('mondialParser', 'addClient', currentClient);
dbOrders.orders.insert(order.Order).then(function (orderId) {
log.debug('mondialParser', 'addOrder', orderId);
dbClients.clients.update({_id: new ObjectID(currentClient)}, {$push: {dataOrders: orderId}}).then(function () {
log.debug('assignOrder', orderId, currentClient);
});
});
});
Q.fcall(promise);
Я пытаюсь-> Вставить клиента, затем вставить заказ, затем назначить заказ _id клиенту _id. Я поставил log.debug, но вижу только
log.debug('mondialParser', 'addClient', currentClient);
Другой его не назвал.. Почему? Это правильное использование обещаний? Есть ли лучший способ?
РЕДАКТИРОВАТЬ:
Другой путь:
var parseMondial = function (db, order, log) {
"use strict";
var dbOrders = mongo(db.serverConfig.name + "/" + db.databaseName, ['orders']);
var dbClients = mongo(db.serverConfig.name + "/" + db.databaseName, ['clients']);
if (order.Order.Nif === "") {
var newClient = {
name: order.Order.Asegurado,
ni: order.Order.Nif,//Never used..
address: order.Order.Direccion,
city: order.Order.Poblacion,
province: order.Order.Provincia,
phone: order.Order.Telefonos,
cp: order.Order.CodigoPostal
};
var insertClient = function () {
dbClients.clients.insert(newClient).then(function (result) {
log.debug('mondialParser', 'addClient', result);
return result;
});
};
var insertOrder = function () {
dbOrders.orders.insert(order.Order).then(function(result) {
log.debug('mondialParser', 'addOrder', result);
return result;
});
};
Q.all([insertOrder(), insertClient()]).spread(function (resultOrder, resultClient) {
dbClients.clients.update({_id: new ObjectID(resultClient)}, {$push: {dataOrders: resultOrder}}).then(function () {
log.debug('assignOrder', resultOrder, resultClient);
});
}).done();
}
};
Это выполняет все «задачи», но внутри w.all resultOrder и resultClient не определены.