gpt4 book ai didi

javascript - 异步SQL插入循环

转载 作者:行者123 更新时间:2023-11-29 20:09:50 25 4
gpt4 key购买 nike

我在向 SQL 数据库中插入行时遇到问题。我想将对象数组转换为 javascript 中的 SQL 表。

以下代码只添加数组的第一个对象。我已经尝试了在 stackoverflow 和其他地方可以找到的所有内容,但无法正常工作。

如有任何帮助,我们将不胜感激。谢谢。

        for (var i = 0; i < arr.length; i++) {
db.save({key:i+"", value:arr[i]}, function(e){

});
}

更新 1:我已将其修改为 mathec 的示例,并稍微缩小了问题范围。

插入的行数取决于插入对象的大小。所以它与处理每个对象所花费的时间有关。

如何解决这个问题?谢谢。

更新 2:

我在下面采纳了 Robert Young 的建议,并包含了一个独立的示例。

下面的例子只插入前 5 个元素。如果我删除了测试键中的一些单词文本,这样它只说一次“单词”,那么就会插入 10 个元素。所以现在我确定它与处理每个对象所需的时间有关。

<html>
<head>
<script src="jquery.js"></script>
<script src="lawnchair.js"></script>
<script type='text/javascript'>


var db = "";
var arr = [];

arr.push({name:"a1", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a2", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a3", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a4", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a5", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a6", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a7", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a8", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a9", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a10", test:"word word word word word word word word word word word word word word "});
arr.push({name:"a11", test:"word word word word word word word word word word word word word word "});

$(function() {
db = new Lawnchair({table:'t50'}, function(e){
for ( i = 0; i < arr.length; i++) {
(function(i) {
add_row(i);
}(i));
}
});
});

function add_row(i) {
db.save({key:i+"", value:arr[i]}, function(e){

});
}

</script>
</head>
<body>

</body>
</html>

更新 3:我使用了罗伯特建议的代码,并提出了以下与三个小元素一起使用的代码。所以我改变了第一个元素,让它比其他元素更大来测试它。第一个元素未添加,最后两个元素添加。处理数组有时间限制吗?

<html>
<head>
<script src="jquery.js"></script>
<script src="lawnchair.js"></script>
<script type='text/javascript'>

var arr = [];
var db = "";

$(function() {
db = new Lawnchair({table:'t51'}, function(e){
arr=[{key:"k1", value:"v1. Because the contents of this element are larger than the others it will not be added for some reason. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. "}
,{key:"k2", value:"v2"}
,{key:"k3", value:"v3"}]

db.batch(arr, function () {
db.all(function (recs) { for (r in recs) {console.log(recs[r].key +"| "+ recs[r].value) } });
});
});

});

</script>
</head>
<body>
</body>
</html>

最佳答案

我自己犯过几次的棘手错误 :-)。如果在循环内调用回调函数,它将被异步调用。因此,您的循环将一直执行到最后。解决这个问题的一种方法是围绕当前 i 值形成一个闭包,这样当回调函数执行时它就绑定(bind)到正确的 i 上。像这样:

function doSomething(i) {
console.log(i)
}

var i, len;

for ( i = 0; i < 10; i++) {
(function(i) {
doSomething(i);
}(i));
}

循环内的函数将立即执行,但 i 值将保留在范围内。

关于javascript - 异步SQL插入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555887/

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