Javascript 两类数组相乘
我正在尝试将两个数组相乘。一个数组通过Javascript 两类数组相乘,javascript,jquery,Javascript,Jquery,我正在尝试将两个数组相乘。一个数组通过$('#element').val()获取其值,另一个是通过获取GET请求的结果 控制台输出: 这是我的密码: $(“#发送1”)。单击(函数(){ var i=1; var Q_值=[]; var G_值=[]; var R_值=[]; 对于(i;i这样做: 对for块中的变量i使用let,因此它是一个单独的变量,在循环完成时仍然可以被引用,并且只有在此时才能从get调用中获得响应 使用+将val()转换为一个数字(尽管在您的情况下,这不是绝对必要的
$('#element').val()获取其值代码>,另一个是通过获取GET请求的结果
控制台输出:
这是我的密码:
$(“#发送1”)。单击(函数(){
var i=1;
var Q_值=[];
var G_值=[];
var R_值=[];
对于(i;i这样做:
- 对
for
块中的变量i
使用let
,因此它是一个单独的变量,在循环完成时仍然可以被引用,并且只有在此时才能从get
调用中获得响应
- 使用
+
将val()
转换为一个数字(尽管在您的情况下,这不是绝对必要的,因为乘法和转换是动态的)
代码:
但我真的建议您研究一下承诺。这确实是一条路。幸运的是,jQuery$.get
返回一个承诺,并且这些承诺可以传递给$。当
时,当所有这些承诺都实现后,它将调用其然后
方法(另请参阅)
$(“#发送1”)。单击(函数(){
var Q_值=[];
var G_值=[];
var R_值=[];
var承诺=[];
for(设i=1;i通过val()返回的值)
始终是字符串。如果要对它们进行数学运算,则需要将它们设为数字。中介绍了实现方法。所有同时执行的$get
之间存在异步竞争条件。循环不会将它们隔开。可以同时执行所有get,但需要等到ll将完成数据“准备就绪”。阅读一些异步和/或ajax编程教程可能会有所帮助,使用Promission和Promission也是如此。所有的。异步竞争条件如何?如图所示,这并不太糟糕,但如果他想将这些数组用于任何重要的事情,他需要有一种方法知道数组是正确的“准备好了吗".而他发布的代码并没有做到这一点。确实,这也是一个问题。但由于问题没有解决这一点…我只是在最后添加了一个警告。这就完成了。谢谢trincot!但现在异步竞争是痛苦的。你有没有快速的解决方案?我正在努力理解你的链接。不客气。我添加了一些代码示例,用于n如何处理异步结果。
$("#sendeS1").click(function () {
var Q_Values = [];
var G_Values = [];
var R_Values = [];
for(let i = 1; i <= 20; i++){
$.get("bewertung/get/weight/"+i, function (weight) {
Q_Values[i-1] = +$('#startup_1').find('.'+i).val();
G_Values[i-1] = weight;
R_Values[i-1] = Q_Values[i-1] * G_Values[i-1];
console.log("Q:"+Q_Values);
console.log("G:"+G_Values);
console.log("R:"+R_Values);
});
//...etc
$("#sendeS1").click(function () {
var Q_Values = [];
var G_Values = [];
var R_Values = [];
var countDown = 20;
for(let i = 1; i <= 20; i++){
$.get("bewertung/get/weight/"+i, function (weight) {
Q_Values[i-1] = +$('#startup_1').find('.'+i).val();
G_Values[i-1] = weight;
R_Values[i-1] = Q_Values[i-1] * G_Values[i-1];
console.log("Q:"+Q_Values);
console.log("G:"+G_Values);
console.log("R:"+R_Values);
countDown--;
if (countDown == 0) processResults(Q_Values, G_Values, R_Values);
});
//...etc
$("#sendeS1").click(function () {
var Q_Values = [];
var G_Values = [];
var R_Values = [];
var promises = [];
for(let i = 1; i <= 20; i++){
promises.push($.get("bewertung/get/weight/"+i, function (weight) {
Q_Values[i-1] = +$('#startup_1').find('.'+i).val();
G_Values[i-1] = weight;
R_Values[i-1] = Q_Values[i-1] * G_Values[i-1];
console.log("Q:"+Q_Values);
console.log("G:"+G_Values);
console.log("R:"+R_Values);
}));
//...etc
}
$.when.apply($, promises).then(function() {
// all is done, process the results here ...
});