调用api客户端修改父api客户端调用的数据

时间:2015-02-26 14:32:02

标签: javascript json node.js

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);
                }

        })

上面是我编写的一段代码,用于修改我从api客户端调用获得的数据。 第一个api调用将是一个json数据。我循环通过该数据从另一个api获取一个值并附加到父的json数据

console.log(data.data.cart_items_list[key].child.prodqty);行在我的日志中打印正确的值,但是console.log(data.data.cart_items_list);这里没有附加新的(child.prodqty)值。

我是Node.js的新手,所以我不知道我是否做得正确

编辑: 如果我console.log(data.data.cart_items_list);输出中有prodqty。但它就是这样的。 prodqty: [Function]

1 个答案:

答案 0 :(得分:0)

默认情况下,您说data.data.cart_items_list获取prodqty: [Function]。如果您获得prodqty值,则需要在data.data.cart_items_list中设置此值,因此您可以在循环后捕获它。我认为,我更喜欢在设置它时创建一个新的var:

 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);
                    }

                })

我添加了一个对象prodqty。然后我把他的钥匙放在prodqty whit上。我这个代码结构可能存在问题。 api使用回调,然后当循环完成可能prodqty对象没有设置值。要解决它,你需要在第二个api传递一个回调或等待一段时间直到第二个api结束:

setTimeout(function(){ console.log(JSON.stringify(prodqty)); }, 3000);` //3 seconds for example