如何从 knex 插入物中取回 ID?
How do I get the ID back from a knex insert?
我将下面的代码用作 graphql 解析器的一部分。我正在尝试 return 从 knex 查询中返回 id,但是 console.log(pageid) 正在返回,因为 null.But 而 console.log(id) 不是;
resolve(parentValue, { id, page_name, page_type, page_category }) {
var pageid = null;
const pageInsert = knex
.insert({ id, page_name, page_type, page_category })
.returning('id')
.into('page')
.then(function (id) {
console.log(id);
pageid = id;
});
console.log(pageid);
console.log(pageInsert);
return pageInsert;
}
我将在 javascript 中注释这些行的执行顺序:
resolve(parentValue, { id, page_name, page_type, page_category }) {
var pageid = null; // -- 1 page id is null
const pageInsert = knex
.insert({ id, page_name, page_type, page_category })
.returning('id')
.into('page')
.then(function (id) {
console.log(id); // -- 6 printing result just file
pageid = id; // -- 7 storing result to variable that is never used
}); // -- 2 created query builder and triggered it's execution
console.log(pageid); // -- 3 pageid is still null
console.log(pageInsert); // -- 4 page insert is a promise which is returned
return pageInsert; // -- 5
}
所以你在 .then
中取回它,但随后你将它存储到局部变量 pageid
并且以后再也不会使用它。
你可能应该这样做:
resolve(parentValue, { id, page_name, page_type, page_category }) {
return knex
.insert({ id, page_name, page_type, page_category })
.returning('id')
.into('page')
}
在来电方:
resolve(...).then(id => console.log(id))
or
const id = await resolve(...);
我将下面的代码用作 graphql 解析器的一部分。我正在尝试 return 从 knex 查询中返回 id,但是 console.log(pageid) 正在返回,因为 null.But 而 console.log(id) 不是;
resolve(parentValue, { id, page_name, page_type, page_category }) {
var pageid = null;
const pageInsert = knex
.insert({ id, page_name, page_type, page_category })
.returning('id')
.into('page')
.then(function (id) {
console.log(id);
pageid = id;
});
console.log(pageid);
console.log(pageInsert);
return pageInsert;
}
我将在 javascript 中注释这些行的执行顺序:
resolve(parentValue, { id, page_name, page_type, page_category }) {
var pageid = null; // -- 1 page id is null
const pageInsert = knex
.insert({ id, page_name, page_type, page_category })
.returning('id')
.into('page')
.then(function (id) {
console.log(id); // -- 6 printing result just file
pageid = id; // -- 7 storing result to variable that is never used
}); // -- 2 created query builder and triggered it's execution
console.log(pageid); // -- 3 pageid is still null
console.log(pageInsert); // -- 4 page insert is a promise which is returned
return pageInsert; // -- 5
}
所以你在 .then
中取回它,但随后你将它存储到局部变量 pageid
并且以后再也不会使用它。
你可能应该这样做:
resolve(parentValue, { id, page_name, page_type, page_category }) {
return knex
.insert({ id, page_name, page_type, page_category })
.returning('id')
.into('page')
}
在来电方:
resolve(...).then(id => console.log(id))
or
const id = await resolve(...);