你好我试过下面的代码,但我的代码不能正常工作
tags.forEach(function(value) {
var where1 = {};
var attr1 = ['id'];
attr1 = ['id'];
where1['name'] = value;
tagData['name'] = value;
tagModel.getTag(where1, attr1, function(code2,result2){
if(result2.length!=0) {
var quick_start_tagData={'quick_start_id' : result1['id'], 'tag_id' :result2[0]['id']}
quick_start_tagModel.saveData(quick_start_tagData, function(code2,result2){
});
console.log(quick_start_tagData);
} else {
tagModel.saveData(tagData, function(code2,result2) {});
}
});
});
问题是循环迭代数据当我将数据的值检查到表中,如果表具有相同的值然后获取其id并插入,如果不是添加新记录并获取其id并插入另一个表
但首先select
查询执行所有时间而不是insert
查询在循环中执行
如何解决这个问题
查询执行方式
执行(默认):
SELECT
id
FROMpxl_tag
ASpxl_tag
WHEREpxl_tag
。name
=' a1';SELECT
id
FROMpxl_tag
ASpxl_tag
WHEREpxl_tag
。name
=' a2';SELECT
id
FROMpxl_tag
ASpxl_tag
WHEREpxl_tag
。name
=' a3';INSERT INTO
pxl_tag
(id
,name
,created_at
,updated_at
)价值观 (默认,' a3',#201; 201-04-04 04:35:32',' 2018-05-04 04:35:32');INSERT INTO
pxl_tag
(id
,name
,created_at
,updated_at
)价值观 (默认,' a3',#201; 201-04-04 04:35:32',' 2018-05-04 04:35:32');INSERT INTO
pxl_tag
(id
,name
,created_at
,updated_at
)价值观 (DEFAULT,&#39; a3&#39;,#201; 02-04 04:35:32&#39;,&#39; 2018-05-04 04:35:32&#39;); < / p>
但我希望首先select
和insert
一步一步
答案 0 :(得分:0)
<强>更新强>
async.each(tags, function(value, cb) {
var where1 = {};
var attr1 = ['id'];
attr1 = ['id'];
where1['name'] = value;
tagData['name'] = value;
tagModel.getTag(where1, attr1, function(code2, result2) {
if (result2.length != 0) {
var quick_start_tagData = {
'quick_start_id': result1['id'],
'tag_id': result2[0]['id']
}
quick_start_tagModel.saveData(quick_start_tagData, function(code2, result2) {
cb();
});
console.log(quick_start_tagData);
} else {
tagModel.saveData(tagData, function(code2, result2) {
cb();
});
}
});
}, function(err) {
if (err) {
console.log('An error ocurred');
} else {
console.log('Nothing happens');
}
});
答案 1 :(得分:0)
如果我理解正确,问题不在于您的INSERT在SELECT之后不会立即运行。您的问题是您在同步函数循环(getTag() and saveData()
)内调用异步函数(forEach()
),因此,当您的异步函数解析时,它们将获得{{1}的最后一个值在同步循环中定义的。你应该给它一个不同的范围来获得正确的tagData值。
试试这个(未经测试):
tagData
如果你需要顺序运行SELECT和INSERT(而不是异步),你应该看看promises和async库。这可能有所帮助: Resolve promises one after another (i.e. in sequence)?