gpt4 book ai didi

node.js - 如何防止 Knex 卡在插入物上

转载 作者:搜寻专家 更新时间:2023-11-01 00:47:42 24 4
gpt4 key购买 nike

我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com