问题描述
我想通过其API向某个应用发送POST请求。我想做的是处理输入数据(称为数据),并在循环中的一条记录到一条记录之间发送POST请求。然后,出于优化目的,我删除了数据中的相应对象。我知道由于JavaScript的异步功能,循环在调用该函数之前完成。但是,即使我将api函数包装在IIFE中,或将其包装在带有await的异步函数中(下面的代码),编译器仍然会给我提供具有最后一个对象相同参数的函数调用。因此,当我在应用程序上看到创建的记录时,David的信息被生成了3次。下面的屏幕快照是处理后的每个记录对象。如果您能告诉我在循环的下一次迭代之前触发api调用的方式,将不胜感激。
l = ['49275','49287','69674','43924']
x = '49375'
listy = []
for i in l:
for n in range(len(x)):
if x[n] != i[n]:
listy.append(n / len(x))
break
else:
listy.append(1.)
print(listy)
解决方法
我认为您还不了解for loop
内部的while
的工作方式。 data
应该每次递增以获取data
中的下一个数组。
data[0] => { userId: 123 ... },data[1] => { userId: 345 ... } and so on
。
每次for loop
迭代都会检查每个子数组的3个元素,因此每次temp
都存储userId and name
的键值。因此,当循环结束时,temp
包含key => userId,name
和相应的值。
var data = [
{
"userId": "123","name": "John","phoneNumber": "123-456-6789"
},{
"userId": "345","name": "Summer","phoneNumber": "535-631-9742"
},{
"userId" : "789","name": "David","phoneNumber": "633-753-1352"
}
]
var dataLen = data.length;
let i = 0 ;
while ( i < dataLen) {
let temp = [];
for (let [key,value] of Object.entries(data[i])) {
if(key == 'userId' || key == 'name'){
temp[key] = value;
}
}
//Just to print the values and understand
for(let k in temp){
console.log(k+" -> "+temp[k]);
}
//here you will pass the temp values to functions
console.log(" At each iteration execute the required functions ");
//asyncFunction(temp);
i += 1;
}