Так что я немного застрял здесь.pg-agreement transaction response
У меня есть объект, такой как:
var lineItems = [
{
id: 1,
quantity: 10
},
{
id: 2,
quantity: 15
},
{
id: 4,
quantity: 22
}
]
теперь, что мне нужно сделать, это цикл через это в транзакции пг-обещание SQL, чтобы гарантировать, что элемент строки в количестве базы данных для соответствующего идентификатора > = элементы объекта, так:
SELECT * FROM inventory WHERE id = $1 AND quantity >= $2, [1,10],
SELECT * FROM inventory WHERE id = $1 AND quantity >= $2, [2,15],
SELECT * FROM inventory WHERE id = $1 AND quantity >= $2, [4,22]
, если я получаю 3 результатов, то объект верно, и я смог вставить запрос с
INSERT INTO orders SET a = 1, b = 2, c = 3, items = lineItems::json etc RETURNING id;
и, конечно, если у меня есть меньше результатов, чем в lineItems объект, то я не заморачиваться с INSERT
заявления, а просто возвращают 'item id: 4, quantity:22 doesn't have enough inventory to perform your request...
Я был первоначально используя:
db.tx(function(t)){
return this.batch([
checkInventory
])
.then(function(inv){
console.log(inv);
});
})
.then(function(results){
console.log(results);
})
.catch(function(error){
console.log(error);
});
где checkInventory
это функция Я звоню в
var checkInventory = function(){
console.log('|-------------------------------------|');
console.log('LINE ITEMS >> ', lineItems);
var query = [], sql = '';
for(var i = 0; i < lineItems.length; i++){
sql += 'SELECT quantity FROM pim_inventory WHERE';
sql += ' product_id = $1 AND quantity >= $2;';
var pquery = [
lineItems[i].id,
lineItems[i].quantity
];
query.push(this.one(sql, pquery));
}
console.log('invQUERY >> ', query);
return query;
};
который генерирующее следующие ошибки:
(node:44810) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): QueryResultError: Multiple rows were not expected.
(node:44810) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 4): error: syntax error at or near "product_id"
|-------------------------------------|
EVENTS >> [ [ Promise {
<rejected> QueryResultError: Multiple rows were not expected.
at QueryResultError.Error (native)
at new QueryResultError (/Users/directtap-dev/www/GitHub/v1.02/node_modules/pg-promise/lib/errors.js:13:22)
at Query.callback (/Users/directtap-dev/www/GitHub/v1.02/node_modules/pg-promise/lib/index.js:629:38)
at Query.handleReadyForQuery (/Users/directtap-dev/www/GitHub/v1.02/node_modules/pg/lib/query.js:89:10)
at Connection.<anonymous> (/Users/directtap-dev/www/GitHub/v1.02/node_modules/pg/lib/client.js:163:19)
at emitOne (events.js:101:20)
at Connection.emit (events.js:188:7)
at Socket.<anonymous> (/Users/directtap-dev/www/GitHub/v1.02/node_modules/pg/lib/connection.js:109:12)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7) },
Promise { <rejected> [Object] } ] ]
любые идеи?
Когда вы используете это: 'this.one (sql, pquery)' вы создаете запросы, каждый из них ожидает ровно одну строку назад, но по крайней мере одна из них возвращает более одной строки, следовательно, ошибка «Несколько строк не ожидались. '. См. API метода, это все. –