Javascript 调用api客户端修改父api客户端调用的数据
上面是我编写的一段代码,用于修改从api客户端调用获得的数据。 第一个api调用将生成一个json数据。我循环遍历该数据,从另一个api获取一个值,并附加到父级的json数据Javascript 调用api客户端修改父api客户端调用的数据,javascript,json,node.js,Javascript,Json,Node.js,上面是我编写的一段代码,用于修改从api客户端调用获得的数据。 第一个api调用将生成一个json数据。我循环遍历该数据,从另一个api获取一个值,并附加到父级的json数据 console.log(data.data.cart\u items\u list[key].child.prodqty)行在我的日志中打印正确的值,但是console.log(data.data.cart\u items\u list)其中没有新添加的(child.prodqty)值 我对Node.js非常陌生,所以我不
console.log(data.data.cart\u items\u list[key].child.prodqty)代码>行在我的日志中打印正确的值,但是console.log(data.data.cart\u items\u list)代码>其中没有新添加的(child.prodqty)值
我对Node.js非常陌生,所以我不知道我做的是否正确
编辑:
如果Iconsole.log(data.data.cart\u items\u list)代码>输出中包含prodqty。但它是这样来的prodqty:[功能]
默认情况下,您可以说data.data.cart\u items\u list
getprodqty:[功能]
。如果您获得prodqty
值,则需要在data.data.cart\u items\u list
中设置该值,这样您就可以在循环后捕获它。我认为,我更喜欢在设置时创建一个新的var:
client.post(config.apiUrl+"cart", args, function(data,response) {
if (data.status == 'success') {
for (var key in data.data.cart_items_list) {
if (data.data.cart_items_list.hasOwnProperty(key)) {
data.data.cart_items_list[key].child.prodqty = function () {
client.get(config.apiUrl+"product/"+data.data.cart_items_list[key].child.child_id+"/quantity", function(invdata, invresponse) {
if(invdata.status == 'success'){
console.log(invdata.data);
return invdata.data;
console.log(data.data.cart_items_list[key].child.prodqty);
}
})
}
}
}
console.log(data.data.cart_items_list);
}
})
我已经添加了一个对象prodqty。然后我用他的钥匙设置了prodqty。我认为这种代码结构可能有问题。api使用回调,然后当循环完成可能时,prodqty对象不设置值。要解决此问题,您需要在第二个api上传递回调或等待一段时间,直到第二个api完成:
client.post(config.apiUrl+"cart", args, function(data,response) {
var prodqty = {};
if (data.status == 'success') {
for (var key in data.data.cart_items_list) {
if (data.data.cart_items_list.hasOwnProperty(key)) {
data.data.cart_items_list[key].child.prodqty = function () {
client.get(config.apiUrl+"product/"+data.data.cart_items_list[key].child.child_id+"/quantity", function(invdata, invresponse) {
if(invdata.status == 'success'){
console.log(invdata.data);
return invdata.data;
prodqty.key = data.data.cart_items_list[key].child.prodqty; //prodqty associated with his key
console.log(data.data.cart_items_list[key].child.prodqty);
}
})
}
}
}
console.log(JSON.stringify(prodqty));
console.log(data.data.cart_items_list);
}
})
我知道console.log(data.data.cart\u items\u list)代码>不起作用。正确吗??在本例中使用:console.log(JSON.stringify(data.data.cart\u items\u list))
@ErikLucio:实际上,新属性是附加到data.data.cart\u items\u list
中的,但它没有所需的值您从异步函数返回时,使用回调或承诺,而且我没有看到data.data.cart\u items\u list[key].child.prodqty
最初的调用data.data.cart\u items\u list[key].child
没有prodqty
。我正在尝试从第二个api调用添加它`console.log(data.data.cart_items_list[key].child.prodqty);'但这是在日志中打印正确的值。啊!现在我想我明白了你的问题:你可以访问prodqty
。在第二个api中询问此值。您希望prodqty
值位于循环后的data.data.cart\u items\u list
中。它是正确的??我确实修改了我的第一个API,以包含我从第二个API调用中获得的值。因此我没有尝试您的答案。无论如何,感谢您宝贵的时间。当我有时间的时候,我会检查这个
setTimeout(function(){ console.log(JSON.stringify(prodqty)); }, 3000);` //3 seconds for example