SQLデータベースに行を挿入できません。私は、オブジェクトの配列をJavaScriptのSQLテーブルに変換したい。ループ内の非同期SQL挿入
次のコードは、配列の最初のオブジェクトのみを追加します。私はstackoverflowや他の場所で見つけることができたすべてを試してきたし、それを動作させることはできません。
ご協力いただければ幸いです。ありがとう。
for (var i = 0; i < arr.length; i++) {
db.save({key:i+"", value:arr[i]}, function(e){
});
}
UPDATE 1:私はの例をmathecするためにそれを変更して、問題を少し絞り込まれてきました 。
挿入される行の数は、挿入されるオブジェクトのサイズによって異なります。だから、それは各オブジェクトを処理するのにかかる時間と関係があります。
この問題を回避するにはどうすればよいですか?ありがとう。
アップデート2:
私は以下のロバート・ヤングの提案を取り、自己完結型の例を含めました。
以下の例では、最初の5つの要素のみが挿入されています。テストキーの単語テキストの一部を削除して「単語」を1回だけ表示すると、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>
UPDATE 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>
投稿したコードの最初のスニペットに問題はありません。ただし、コールバック引数を使用していない場合は不要です。奇妙なことが起こっているようです。問題の[短い、自己完結型の例](http://sscce.org/)を投稿できますか? –
こんにちはロバート、あなたが提案した完全な例を加えました。何か案は?ありがとう。 – user1389968