等待书架插入的查询结果
Wait for query result of Bookshelf insert
基本上我需要等待 insert
查询的结果 Bookshelf.js
,因为我需要查询提供的 ID 在我的数据库中插入一行
我不了解 Node 及其组件的异步行为的某些方面
所以问题出在这部分代码中:
插入方法书架
var new_timer = new Timer({
titolo: title,
time: timerVal,
created: creation,
ended: ended,
id_owner: owner
});
new_timer.save(null, {method: "insert"}).then(function(model){
if(!model)
return res.send({status: 400, url: "/add"});
associateTag(model.id_timer, tags);
return res.send({status: 200, url: "/"});
});
使用的函数
var insertAssociation = function(timerID, tags) {
return knex.table('timer_tag').insert({id_tmr: timerID, id_tg: tags.id_tag});
}
var associateTag = function(timerID, tags) {
var id_tag;
for(var i = 0; i < tags.length; i++){
getTagByName(tags[i]).then(function(result) {
console.log(result);
insertAssociation(timerID, result[0]).then(function(k) {
console.log(k);
});
});
}
}
var getTagByName = function(name) {
return knex.table('tags').select('id_tag').where('nome_tag', name);
}
替换
for(var i = 0; i < tags.length; i++){
getTagByName(tags[i]).then(function(result) {
console.log(result);
insertAssociation(timerID, result[0]).then(function(k) {
console.log(k);
});
});
}
由
Promise.all(tags.map(x => getTagByName(x)
.then((result) => insertAssociation(timerID, result[0]))))
您正在异步启动多个请求。我所做的是使用 Promise.all
来等待所有这些请求完成。
编辑:完整示例
new_timer.save(null, {
method: 'insert',
}).then((model) => {
if (!model) {
res.send({
status: 400,
url: '/add',
});
return;
}
associateTag(model.id_timer, tags)
.then((allRets) => {
console.log(allRets);
res.send({
status: 200,
url: "/"
});
})
.catch(e => {
// error handling
});
})
.catch(e => {
// error handling
});
var associateTag = function (timerID, tags) {
return Promise.all(tags.map(x => getTagByName(x)
.then((result) => insertAssociation(timerID, result[0]))));
}
基本上我需要等待 insert
查询的结果 Bookshelf.js
,因为我需要查询提供的 ID 在我的数据库中插入一行
我不了解 Node 及其组件的异步行为的某些方面
所以问题出在这部分代码中:
插入方法书架
var new_timer = new Timer({
titolo: title,
time: timerVal,
created: creation,
ended: ended,
id_owner: owner
});
new_timer.save(null, {method: "insert"}).then(function(model){
if(!model)
return res.send({status: 400, url: "/add"});
associateTag(model.id_timer, tags);
return res.send({status: 200, url: "/"});
});
使用的函数
var insertAssociation = function(timerID, tags) {
return knex.table('timer_tag').insert({id_tmr: timerID, id_tg: tags.id_tag});
}
var associateTag = function(timerID, tags) {
var id_tag;
for(var i = 0; i < tags.length; i++){
getTagByName(tags[i]).then(function(result) {
console.log(result);
insertAssociation(timerID, result[0]).then(function(k) {
console.log(k);
});
});
}
}
var getTagByName = function(name) {
return knex.table('tags').select('id_tag').where('nome_tag', name);
}
替换
for(var i = 0; i < tags.length; i++){
getTagByName(tags[i]).then(function(result) {
console.log(result);
insertAssociation(timerID, result[0]).then(function(k) {
console.log(k);
});
});
}
由
Promise.all(tags.map(x => getTagByName(x)
.then((result) => insertAssociation(timerID, result[0]))))
您正在异步启动多个请求。我所做的是使用 Promise.all
来等待所有这些请求完成。
编辑:完整示例
new_timer.save(null, {
method: 'insert',
}).then((model) => {
if (!model) {
res.send({
status: 400,
url: '/add',
});
return;
}
associateTag(model.id_timer, tags)
.then((allRets) => {
console.log(allRets);
res.send({
status: 200,
url: "/"
});
})
.catch(e => {
// error handling
});
})
.catch(e => {
// error handling
});
var associateTag = function (timerID, tags) {
return Promise.all(tags.map(x => getTagByName(x)
.then((result) => insertAssociation(timerID, result[0]))));
}