首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Javascript中以正确的顺序输入数据?

如何在Javascript中以正确的顺序输入数据?
EN

Stack Overflow用户
提问于 2016-06-27 18:43:34
回答 1查看 137关注 0票数 1

我使用Node.js向Server表发送一些数据。代码有一个for循环,它调用一个函数,它运行一个insert语句(最终将是一个存储过程)。foor循环按日期顺序遍历一系列对象。大多数情况下,insert语句以正确的顺序结束,但有些条目的顺序是错误的。

是否有办法确保数据库中的日期顺序与我所称的顺序相同(按时间顺序)。我知道think中的SORT,但我认为程序应该按照正确的顺序执行。我一直听说只要有可能就避免线程休眠和计时器,所以我不喜欢使用setTimeout。还有其他方法吗,也许是通过事件处理?

下面的示例代码。jsonArray的一个元素是一个具有日期键和其他几个数字的对象。Server表具有一个自动递增的主键整数,我希望按时间顺序输入日期(就像我所说的那样),这样主键和日期都是有序的。

我还将MSSQL导入用于SQL操作。

代码语言:javascript
复制
// Main class
for (let j = 0; j < jsonArray.length; j++) {
   let myObj = jsonArray[j]
   WriteToDB.myWriteFunction(myObj)
}

// Different class    
const sql = require('mssql')
let request = new sql.Request()
let query = (...)

function myWriteFunction () {
   request.query(query) // Just the actual insert statement, no issue here
   request.on('error', function (err) {
      console.log('REQ ERROR')
      console.dir(err)
   })
// These dates are out of order, due to when the done event is triggered
   request.on('done', function () { 
      console.log('QUERY RAN FOR ' + e1)
   })
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-28 13:46:43

我假设是某种多线程导致了

这些数据库操作是异步完成的,它们都发生在同一个线程上。如果D1 (第一次数据库操作)比D2 (第二次数据库操作)花费更长的时间,并且在D2之后插入D1 (导致您的问题),那么它不是涉及多线程的问题,可能D2有更多的数据等等。

我完全建议您不要使用下面的代码示例,除非您真的相信sql中的顺序确实重要。req2只有在req1完成之后才能完成,等等。=>浪费时间

代码语言:javascript
复制
let jsonArray = [1,2,3,4];
if (checkArray(jsonArray)) {
  createReq(jsonArray[0])
}
function createReq(req) {
  new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve();
      jsonArray.shift();
      console.log(req);
      if (checkArray(jsonArray)) {
        createReq(jsonArray[0])
      }
    }, 100)
  })
}
function checkArray(arr) {
  return (jsonArray && jsonArray[0])
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38061054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档