我正在尝试使用express.js对sqlite3数据库执行一系列$ .post请求,但它返回一个unhandled rejection SquelizeTimeoutError: SQLITE_BUSY: database is locked
。
我知道这与对数据库的异步请求有关,但是ajax async:false
已过时,.then
或.done()
似乎并不在等待第一篇文章的完成第二个,因此数据库在尝试发布时被锁定。
无论如何,我可以在其中搜索数据库以查看是否存在类似的条目,如果没有,则添加具有两个连续帖子请求的新作者(或多个作者)?还有另一种更好的减少并发的方法吗?
这是我的代码:
$('#add-button').click(function() {
$(".add-status").empty();
var bookUrl = url + "books"; // localhost:3000/api/
// Values from form.
var addTitle = $('#add-book').val();
var addIsbn = $('#add-isbn').val();
var authorList = $('[class^="add-author-"]').map( function (i, data) {
var re = /\w+/; // Checks for string not null.
var authorName = ($(data).val());
if (re.test(authorName)) {
return {name: $(data).val()} ;
}
});
authorList.each( function ( index, data) {
var addAuthor = data.name;
console.log(addAuthor);
var encode = encodeURIComponent(addAuthor);
$.get(url + "search?type=author&name=" + encode).then(res => {
console.log(res.length);
if (res.length < 1) {
$.post(url + "authors/", {name: addAuthor}).then(function(response) {
console.log(response.id);
$.post(url + "authors/" + response.id + "/books", {bookTitle: addTitle, bookISBN: addIsbn}).then( res => {
console.log(res);
});
});
} else {
console.log(res[0]);
$.post(url + "authors/" + res[0].id + "/books", {bookTitle: addTitle, bookISBN: addIsbn}).then( res => {
console.log(res);
});
};
});
$('.add-form').each( function() {
this.reset();
});
$('.add-status').append(
'<h2 class="success"> Entry Successfully added to the database</h2>');
});
});