- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Knex.js 将数组中的值插入到 PostgreSQL 数据库中。我一直遇到的问题是 Knex 在数据库中插入行后会挂起。
我已经为此苦苦挣扎了几个小时,并尝试了多种解决方案,包括 Get Knex.js transactions working with ES7 async/await , Make KnexJS Transactions work with async/await , 和 Knex Transaction with Promises .
无论我尝试哪种口味,我都会回到原点。我很确定我遗漏了一些明显的东西,但可能是我没有喝足够的咖啡。
这是我的测试代码:
const testArray = [
{line: 'Canterbury Tales'},
{line: 'Moby Dick'},
{line: 'Hamlet'}
];
const insertData = (dataArray) => {
return new Promise( (resolve, reject) => {
const data = dataArray.map(x => {
return {
file_line: x.line
};
});
let insertedRows;
db.insert(data)
.into('file_import')
.then((result) => {
insertedRows = result.rowCount;
resolve(insertedRows);
})
});
}
const testCall = (b) => {
insertData(b).then((result) => {
console.log(`${result} rows inserted.`);
})
}
testCall(testArray);
这将返回以下内容:
3 rows inserted.
编辑:使用解决方案更新感谢@sigmus,我能够通过添加 db.destroy()
来实现它。这是更新后的代码块,功能齐全:
const testArray = [
{line: 'Canterbury Tales'},
{line: 'Moby Dick'},
{line: 'Hamlet'}
];
const insertData = (dataArray) => {
return new Promise( (resolve, reject) => {
const data = dataArray.map(x => {
return {
file_line: x.line
};
});
let insertedRows;
db.insert(data)
.into('file_import')
.then((result) => {
insertedRows = result.rowCount;
resolve(insertedRows);
})
.finally(() => {
db.destroy();
});
});
}
const testCall = (b) => {
insertData(b).then((result) => {
console.log(`${result} rows inserted.`);
process.exit(0);
})
}
testCall(testArray);
最佳答案
如果在 console.log(`${result} rows inserted.`);
之后添加 process.exit(0);
脚本应该退出。
这可能是连接池问题,请尝试使用 destroy
,如下所述:https://knexjs.org/#Installation-pooling
关于node.js - 如何防止 Knex 卡在插入物上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57118332/
当我在我的 Angular 应用程序中创建一个常量时,我想访问一个 $injectable。 这样的事情可能吗?注入(inject)剂如何申报? myApp.constant('myCon
我正在尝试提取称为tests.stats()的个人功能的输出 我用return语句创建一个函数: return(c(list.test.1, list.test.2 ,list.test.3,
我是一名优秀的程序员,十分优秀!