NodeJS:变量未更新



对不起,我无法弄清楚我在这里错过了什么......

//calcular valor en usd
function usd_balance(variable) {
//creamos un array para poner los precios
var conversiones_usd = 123;
//armamos el pedido
req = 'https://blockchain.info/ticker';
//revision
console.log(req);
request(req, { json: true }, (err, res, body) => {
//en caso de error de comunicación
if (err) { return console.log(err); }
//revisamos el feedback
//console.log(body);
//variable de precio en usd
conversiones_usd = body.USD.sell;
//conversiones.eur = body.EUR.sell;
//conversiones.gbp = body.GBP.sell;
});
//calculamos el valor
console.log(conversiones_usd);
var usd = (variable * conversiones_usd);
return usd;
}

尝试使用请求信息更新价格,但它坚持为"123"。

有人有任何线索吗?我敢肯定,我错过了一些明显的东西。

提前感谢亲爱的社区! 克里斯


解决:

为了任何阅读本文的人:我通过使用 fs 来更新这个问题,而不是使用 fs 来更新这个问题,fs 似乎默认出现在节点中,并从文件中读取信息。所以这就是我正在做的:

//calcular valor en usd
function usd_balance(variable) {
//creamos un array para poner los precios
var conversiones = JSON.parse(fs.readFileSync('conversiones', 'utf8'));
//pasamos a usd
conversiones_usd = conversiones.USD.sell;
conversiones_eur = conversiones.EUR.sell;
conversiones_gbp = conversiones.GBP.sell;
//armamos el pedido
//req = 'https://blockchain.info/ticker';
//revision
//console.log(req);
//request(req, { json: true }, (err, res, body) => {
//en caso de error de comunicación
//if (err) { return console.log(err); }
//revisamos el feedback
//console.log(body);
//variable de precio en usd
//conversiones_usd = body.USD.sell;
//conversiones.eur = body.EUR.sell;
//conversiones.gbp = body.GBP.sell;
//});
macro = (variable / 1000000);
//calculamos el valor
//informar conversiones
//console.log(conversiones_usd);
var usd = (macro * conversiones_usd);
return usd;
}

当然,还有我的 Json 数据文件:

{
"USD" : {"15m" : 6443.61, "last" : 6443.61, "buy" : 6443.61, "sell" : 6443.61, "symbol" : "$"},
"AUD" : {"15m" : 8918.37, "last" : 8918.37, "buy" : 8918.37, "sell" : 8918.37, "symbol" : "$"},
"BRL" : {"15m" : 25266.52, "last" : 25266.52, "buy" : 25266.52, "sell" : 25266.52, "symbol" : "R$"},
"CAD" : {"15m" : 8486.12, "last" : 8486.12, "buy" : 8486.12, "sell" : 8486.12, "symbol" : "$"},
"CHF" : {"15m" : 6406.74, "last" : 6406.74, "buy" : 6406.74, "sell" : 6406.74, "symbol" : "CHF"},
"CLP" : {"15m" : 4302400.76, "last" : 4302400.76, "buy" : 4302400.76, "sell" : 4302400.76, "symbol" : "$"},
"CNY" : {"15m" : 44682.59, "last" : 44682.59, "buy" : 44682.59, "sell" : 44682.59, "symbol" : "¥"},
"DKK" : {"15m" : 42436.12, "last" : 42436.12, "buy" : 42436.12, "sell" : 42436.12, "symbol" : "kr"},
"EUR" : {"15m" : 5692.19, "last" : 5692.19, "buy" : 5692.19, "sell" : 5692.19, "symbol" : "€"},
"GBP" : {"15m" : 5076.53, "last" : 5076.53, "buy" : 5076.53, "sell" : 5076.53, "symbol" : "£"},
"HKD" : {"15m" : 50582.69, "last" : 50582.69, "buy" : 50582.69, "sell" : 50582.69, "symbol" : "$"},
"INR" : {"15m" : 454377.5, "last" : 454377.5, "buy" : 454377.5, "sell" : 454377.5, "symbol" : "₹"},
"ISK" : {"15m" : 705768.49, "last" : 705768.49, "buy" : 705768.49, "sell" : 705768.49, "symbol" : "kr"},
"JPY" : {"15m" : 713173.73, "last" : 713173.73, "buy" : 713173.73, "sell" : 713173.73, "symbol" : "¥"},
"KRW" : {"15m" : 7327806.19, "last" : 7327806.19, "buy" : 7327806.19, "sell" : 7327806.19, "symbol" : "₩"},
"NZD" : {"15m" : 9833.08, "last" : 9833.08, "buy" : 9833.08, "sell" : 9833.08, "symbol" : "$"},
"PLN" : {"15m" : 24676.91, "last" : 24676.91, "buy" : 24676.91, "sell" : 24676.91, "symbol" : "zł"},
"RUB" : {"15m" : 435858.91, "last" : 435858.91, "buy" : 435858.91, "sell" : 435858.91, "symbol" : "RUB"},
"SEK" : {"15m" : 59467.84, "last" : 59467.84, "buy" : 59467.84, "sell" : 59467.84, "symbol" : "kr"},
"SGD" : {"15m" : 8900.81, "last" : 8900.81, "buy" : 8900.81, "sell" : 8900.81, "symbol" : "$"},
"THB" : {"15m" : 215023.38, "last" : 215023.38, "buy" : 215023.38, "sell" : 215023.38, "symbol" : "฿"},
"TWD" : {"15m" : 198937.9, "last" : 198937.9, "buy" : 198937.9, "sell" : 198937.9, "symbol" : "NT$"}
}

发生这种情况是因为 javascript 中的每个请求都是异步的,返回一个 promise,即它的控制台.log在结果分配给conversions_usd之前执行

你可以从 ES7 使用 async/await,也可以使用 promise。对这些主题进行研究,有不同的申请方式。

最新更新