一次进行一次或多次发布请求-节点异步问题?

时间:2018-06-26 19:52:22

标签: javascript node.js

这是我第一次进行适当的申请。但是我遇到了一个问题,我一生无法找到解决方法。 下面的代码显示了我遇到问题的函数的代码。

该代码用于将损坏记录在资产上,以选中要记录的损坏类型。通常检查多个。 (记录一个损坏的工作正常)。我尝试解决的方法是将检查到的损坏存储到数组中,然后遍历该数组,对数组中的每个元素发出发布请求。

在终端中返回的查询是正确的,但是在postgres日志文件中,我看到情况并非如此。如果我提交5种不同的损害赔偿,则表示正在实施5种损害赔偿,但是有些损害被多次注册,而其他损害则根本没有注册。

我已经完全解决了这个问题。遍历每个元素并为每个元素发出发布请求是一个坏主意吗?还是我应该怎么解决呢?如果我在浏览器中使用断点并逐步执行代码,则所有损害均已正确注册,因此可能存在我未在此处发现的异步问题?

  // submit form with selected damages
  $('#registerDamagesForm').submit(function (e) {
  e.preventDefault();
  let = selectedDamage = $("input:checkbox[name=damage_type]:checked").map(function () {
    return $(this).val();
  }).get();

  // loop over the array and call postDamage
  // for each element in array
  selectedDamage.forEach(function (selectedDamage) {
    let sendObject = {};
    sendObject["damage_type"] = selectedDamage;
    sendObject["poi_id"] = current_id;
    console.log("send " + Object.values(sendObject));
    postDamage(sendObject);
  })
});

// post request using promises 
function postDamage(damage) {
  console.log("post " + Object.values(damage));
  $.post({
    type: 'POST',
    url: '/api/pois/skade',
    data: damage
  })
  .done(function (skade) {
    // do stuff with the returned damages
  })
};

// routes
router.post('/damage', (req, res) => {
  queries.createDamage(req.body)
  .then(damage => {
    res.json(damage);
  })
  .catch(function (err) {
    console.error('get comment error ' + err);
  });
});

// make sql
createDamage(damage) {
    const sql = db.insert(damage).returning('*').into('damages');
    console.log(sql.toString());
    return sql;
  },

0 个答案:

没有答案