javascript - 下一次迭代开始前的 API 调用在循环中开始
问题描述
我想通过他们的 API 向某个应用程序发送一个 POST 请求。我想要做的是处理输入数据(称为数据)并在循环中的一条记录上发送一个 POST 请求。然后,为了优化目的,我删除了数据中的相应对象。我知道由于 JavaScript 的异步特性,循环在函数被调用之前完成。但是,即使我将 api 函数包装在 IIFE 中或将其包装在带有 await 的异步函数中(代码如下),编译器仍然给我使用相同参数的函数调用,即最后一个对象。所以,当我在应用程序上看到创建的记录时,大卫的信息被生成了 3 次。下面的截图是处理后的每个记录对象。如果你能告诉我在循环的下一次迭代之前触发 api 调用的方法,
const obj = [];
var record = {};
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;
var people = data;
createKeyValue = ((key, value) => {
var temp = {};
temp["value"] = value;
obj[key] = temp;
});
apiCall = ((record) => {
clientInformation.record.addRecord.then((resp) => {
console.log(resp);
}).catch((err) => {
console.log(err);
});
});
async function asyncFunction(record) {
let promise = new Promise((resolve, reject) => {
setTimeout(() => apiCall(record), 1000)
});
let result = await promise;
console.log(result);
}
while (dataLen > 0) {
for (let [key, value] of Object.entries(data[0])) {
switch(key) {
case 'userId':
createKeyValue(key, value);
break;
case 'name':
createKeyValue(key, value);
break;
default:
}
}
record["record"] = obj;
asyncFunction(record);
data.shift();
dataLen -= 1;
}
解决方案
我想你还没有理解for loop
里面的while
工作原理。data
应该每次递增以获取内部的下一个数组data
。
data[0] => { userId: 123 ... }, data[1] => { userId: 345 ... } and so on
。_
在每次for loop
迭代中检查每个子数组的 3 个元素,因此每次都temp
存储userId and name
. 因此,当循环完成时,temp
包含 askey => 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;
}
推荐阅读
- schema - 如果没有传递数据,aframe 实体如何默认为模式实体
- python - Pandas Python中项目的分组和计算频率
- c++ - 从向量中删除重复值
>,不区分大小写?C++ - python - 如何仅使用卷积层实现图像分类?
- excel - 在 Sheet2 中的 targetSheet 中粘贴图表
- python - 我想在用户无法输入正数时打印它会告诉他们该数字无效(例如-8.25)
- c++ - 如何使用 GetSysColorBrush 获取颜色?
- c# - 将对象列表加密和解密为 byte[]
- java - 为什么从属性文件读取时环境变量始终为空?
- python - 使用函数的返回值