Имеется парсер html страницы, который заносит данные в DB, c колбеком (ниже). На одной странице имеется несколько опций, которые надо занести в таблицу отдельно. Их перебираю с помощью
$(...).each, затем проверяю существование в таблице ключа product_id-option_id, обновляя или записывая затем новые данные.
...
"callback":function(error,result,$) {
if (error) {
logger.error(error);
return;
}
logger.info('(%d/%d) Url %s %d', this.idx, this.total, this.uri, result.statusCode);
if (result.statusCode!=200) {
return;
}
// $ is a jQuery instance scoped to the server-side DOM of the page
var product_new = {
product_id: this.product_id
};
// options
$("#pr .option").each(function(index,a)
product_new.option_id = $(a).data('opt')||0;
logger.debug('>> pid=%d, opt=%d',product_new.product_id, product_new.option_id);
Product.find({product_id: product_new.product_id, option_id: product_new.option_id||0}).success(function(product_old){
logger.debug(index);
logger.debug('<< pid=%d, opt=%d',product_new.product_id, product_new.option_id);
});
});
}
Проблема в том, что методу (объект ORM Sequelizejs) Product.find передается по очереди несколько пар параметров, но в колбеке после поиска их в БД они устанавливаются во всех случаях в последнюю пару:
[Friday, January 31, 2014 11:52:59,379] DEBUG >> pid=76, opt=13
[Friday, January 31, 2014 11:52:59,379] DEBUG >> pid=76, opt=308
[Friday, January 31, 2014 11:52:59,380] DEBUG >> pid=76, opt=310
[Friday, January 31, 2014 11:52:59,380] DEBUG >> pid=76, opt=311
[Friday, January 31, 2014 11:52:59,502] DEBUG 0
[Friday, January 31, 2014 11:52:59,503] DEBUG << pid=76, opt=311
[Friday, January 31, 2014 11:52:59,789] DEBUG 2
[Friday, January 31, 2014 11:52:59,789] DEBUG << pid=76, opt=311
[Friday, January 31, 2014 11:52:59,793] DEBUG 3
[Friday, January 31, 2014 11:52:59,793] DEBUG << pid=76, opt=311
[Friday, January 31, 2014 11:52:59,802] DEBUG 1
[Friday, January 31, 2014 11:52:59,802] DEBUG << pid=76, opt=311
При чем, переменная индекса перебора передается та, которая была при вызове метода Product.find, то есть нормально. Грешил на то что product_new не в скоупе из-за того, что определяется выше перебора опций, но если на каждую опцию product_new копировать локальной переменной, будет тоже самое, но ведь index же нормально передается!