繁体   English   中英

nodejs返回主函数

[英]nodejs return to main function

我在nodejs中是新手,并且在将值返回给main函数时遇到了一些问题。

我尝试这样的事情,但为我工作。

function request_price(name)
{

    var price;

    (function(price_r) {

        request('http://jack.dev/price.php?name='+encodeURIComponent(name), function(error, response, body)
        { 

            console.log(body);
            price_r = body;

        });

    })(price);

    return price;

}

我需要从请求返回主体值到主函数request_price

编辑:

for (var i = 0; i < offer.items_to_receive.length; i++) {

    for (var j = 0; j < inventory.length; j++) {

        if (offer.items_to_receive[i].assetid == inventory[j].id) {

            var price = request_price(inventory[j].market_name, responseHandler);

            OfferData.items.push({

                id: inventory[j].id,
                name: inventory[j].name,
                image: inventory[j].icon_url,
                price: price

            });

            break;

        }

    }

}

setTimeout(function () {
    console.log(OfferData);
}, 1000)

responseHandler函数显示console.log很好,但console.log上的对象OfferData返回价格未定义

它不像您尝试的那样工作。

您尝试做的是调用request_price()然后在内部进行request调用(如果使用请求库 ,则应为request.get(...) );

request()函数异步运行,因此它可能需要一段时间才能解决,但是代码没有等待,因此它继续return price; 尚无价值。

等到request()函数的响应返回时, request_price()函数已经完成运行,因此这就是它不起作用的原因。

为了使其正常工作,您需要在request()函数回调中处理price

您可以看一下我写的这个建议 ,它可能是( IMO )更干净的实现:

var request = require('request');

function request_price(name, responseHandler) {
    var price;
    request.get('http://jack.dev/price.php?name='+encodeURIComponent(name), responseHandler );
}

function responseHandler(error, response, body) {
    console.log(body);
    var x = ... //process body
    return x;
}

request_price('bob', responseHandler);

进一步编辑:

在这种情况下,您刚刚添加的内容,您需要遵循以下逻辑:

  1. 更改responseHandler函数,使其可以执行OfferData.items.push()
  2. 使用循环根据需要多次调用request_price()
  3. inventory[j]对象作为参数传递给request_price()函数
  4. 当响应返回并由responseHandler处理时,请从responseHandler内部调用OfferData.items.push() ,因为现在priceinventory[j]都可用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM