У меня возникли трудности с циклом for с петлями с запросами (knexjs.org). Начнем с того, как я повторяю свой массив. Мой массив выглядит следующим образом:NodeJS повторяется слишком быстро с knex
[ { module_id: 9, able: '1', will: '1' },
{ module_id: 9, able: '1', will: '1' },
{ module_id: 2, able: '1', will: '1' },
{ module_id: 2, able: '1', will: '1' },
{ module_id: 4, able: '1', will: '1' },
{ module_id: 4, able: '1', will: '1' },
{ module_id: 1, able: '1', will: '1' },
{ module_id: 1, able: '1', will: '1' },
{ module_id: 8, able: '1', will: '1' },
{ module_id: 8, able: '1', will: '1' },
{ module_id: 7, able: '1', will: '1' },
{ module_id: 7, able: '1', will: '1' },
{ module_id: 5, able: '1', will: '1' },
{ module_id: 5, able: '1', will: '1' },
{ module_id: 3, able: '1', will: '1' },
{ module_id: 3, able: '1', will: '1' },
{ module_id: 6, able: '1', will: '1' },
{ module_id: 6, able: '1', will: '1' } ]
Тогда "весело" часть приходит:
for(var i = 0; i < obj.length; i++) {
var object = obj[i];
console.log("has object", object);
db.knex('interests').where({
inventory_id: inventory_id,
module_id: object.module_id
}).select().limit(1).then(function (result) {
console.log("MODULE ID", object.module_id);
if (result.length == 0) {
db.knex('interests').insert({
inventory_id: inventory_id,
module_id: object.module_id,
could: object.able,
would: object.will
}).then(function (a) {
});
} else {
db.knex('interests').where({
inventory_id: inventory_id,
module_id: object.module_id
}).update({
could: object.able,
would: object.will
}).then(function (a) {
});
}
});
}
Что делает код выглядит следующим образом:
- Итерация через массив
- запросов база данных
- Если нет результатов, то создайте что-нибудь
- Если результаты, обновите что-нибудь
Есть только одна проблема. Для петли тоже быстро. Или, другими словами: запрос слишком медленный. Зачем? Потому что object.module_id всегда является последним module_id из массива.
Как я могу убедиться, что он использует module_id из цикла for, а не переменной, которую он дал в последний раз, когда он был итерирован?
Мы почти там, спасибо за вашу помощь до сих пор ... пока, в queryinterest, 'return q_result' возвращает undefined, потому что запрос еще не закончен ... как это исправить? – Thijmen
whoops Я думаю, что я сделал опечатку 'q_restult' вместо' q_result', я редактировал мой код! –
Это тоже не работает. Возврат 'q_result' достигается до того, как' q_result = result' – Thijmen