我正在使用knex 0.13.0
,我正在尝试使用以下函数插入到mysql数据库中:
async function create(title, description) {
//trim spaces
console.log("title: " + title)
console.log("description: " + description)
title = title.trim()
description = description.trim()
createdAt = _.now()
deleted = false
console.log("Create Post: " + title + " " + description + " " + createdAt + " " + deleted)
if (title.length < 1 || title.length > 255) throw new Error('Title is not valid.')
if (description.length < 1) throw new Error('Description is not valid.')
try {
await knex('posts').insert({
title,
description,
createdAt,
deleted
})
console.log("added to db")
return true;
} catch (e) {
return "An error occured: " + e;
}
}
Create Post: Title Description 1505062847788 false
的最后一个控制台输出显示正确,但即使在等待
感谢您的回复!
答案 0 :(得分:1)
我正在使用Node 6,因此暂时无法测试'await'(来自节点7)但是从this post看起来你应该为变量分配await响应。像:
...
var awResponse; // new variable
try {
awResponse = await knex('posts').insert({
...
详细说明:
async function create(title, description) {
//trim spaces
console.log("title: " + title)
console.log("description: " + description)
title = title.trim()
description = description.trim()
createdAt = _.now()
deleted = false
console.log("Create Post: " + title + " " + description + " " + createdAt + " " + deleted)
if (title.length < 1 || title.length > 255) throw new Error('Title is not valid.')
if (description.length < 1) throw new Error('Description is not valid.')
var awResponse; // new variable
try {
awResponse = await knex('posts').insert({
title,
description,
createdAt,
deleted
})
console.log("added to db")
return true;
} catch (e) {
return "An error occured: " + e;
}
}
你所拥有的应该工作得很好,但我一直在做的(作为你的另一种选择)只是直接使用promises,并构建我的数据访问函数通常如下:
function create(title, description) {
return Promise.resolve().then(function () {
// This first section is for preping the record for insert.
//
//trim spaces
console.log("title: " + title)
console.log("description: " + description)
title = title.trim()
description = description.trim()
// createdAt = _.now() // I have a error that "_" is not valid
createdAt = (new Date()).toISOString();
deleted = false
console.log("Create Post: " + title + " " + description + " " + createdAt + " " + deleted)
if (title.length < 1 || title.length > 255) throw new Error('Title is not valid.')
if (description.length < 1) throw new Error('Description is not valid.')
return { "title": title,
"description": description,
"createdAt": createdAt,
"deleted": deleted };
})
.then(function (recordToInsert) {
// This second section is for the insert.
//
console.log("Part #2");
return knex('posts').insert(recordToInsert)
.on('query-error', function(ex, obj) {
// console.log("KNEX query-error ex:", ex);
// console.log("KNEX query-error obj:", obj);
// Below logs db errors into my custom encapsulation of winston logging.
// ... and the .catch further down will still be executed.
log.logMsg('error', "DBA.INS88", "KNEX create.on.query-error", {"fnc": "create", "obj":obj, "ex":ex} );
})
})
.then(function (insertResult) {
// This third section is for post-processing the result (if needed).
//
console.log("Part #3 added to db :", insertResult);
return insertResult; // returns id value from insert;
})
.catch(function (e) {
// I omit this .catch to let the caller know about and handle the exceptions
console.log( "An error occured: " + e);
});
};
希望这有帮助!