Данные меняются перед использованием в функции

Я пытался отправить электронное письмо для каждого просроченного билета в базе данных. Отрывок выглядит так:

for (var i = 0; I < rows.length; ++i) {
    if (today > new Date(rows[i].end_date)) {
        (function(id) {
            db.exec('update tickets ' +
                    'set status="expired" ' +
                    'where ticket_id= ' + id + ';' +
                    'insert into changes ' +
                    'values(' + id + ',' +
                        '"system",' +
                        '"ticket expired",' +
                        '"' + (today.getUTCMonth() + 1) +
                        '/' + today.getUTCDate() +
                        '/' + today.getUTCFullYear() +
                    '");',
                    function(err) {
                        if (err) {
                            console.log(err);
                            return;
                        }

                        console.log(id);
                        sendAlert(id);
                    }
            );
        })(rows[i].ticket_id);
    }
}

Как вы можете видеть, я пытался использовать анонимную функцию, чтобы предотвратить изменение данных при каждом вызове, но это все равно не сработало.

Я не знаю, что я что-то упустил.

1 ответ

Решение

Кажется, выполнение этой задачи является асинхронным. Когда вам нужно перебрать асинхронные вызовы, последовательность операций не гарантируется.

Может быть, вам нужна библиотека потоков управления, например, Async или Promise. Есть несколько методов для управления этими потоками даже в итерациях.

Другие вопросы по тегам