.each循环内的express.js $ .post()请求锁定数据库?

时间:2019-01-17 14:29:32

标签: javascript jquery express ecmascript-6 sequelize.js

我正在尝试使用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>');

    });
  });

0 个答案:

没有答案