[英]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);
进一步编辑:
在这种情况下,您刚刚添加的内容,您需要遵循以下逻辑:
responseHandler
函数,使其可以执行OfferData.items.push()
request_price()
inventory[j]
对象作为参数传递给request_price()
函数 responseHandler
处理时,请从responseHandler
内部调用OfferData.items.push()
,因为现在price
和inventory[j]
都可用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.