如何在javascript函数之外获取数据

如何在javascript函数之外获取数据,javascript,Javascript,我想知道我是否能在这里得到一些帮助,我目前还不是一个熟练的编码员,但我正在尝试检索函数之外的结果,而日志中的结果是未定义的 var pricecrex; getDataFromAPI("https://api.crex24.com/CryptoExchangeService/BotPublic/ReturnTicker?request=[NamePairs=BTC_WAGE]", true, function(data){ var resultcrex =

我想知道我是否能在这里得到一些帮助,我目前还不是一个熟练的编码员,但我正在尝试检索函数之外的结果,而日志中的结果是未定义的

var pricecrex;

getDataFromAPI("https://api.crex24.com/CryptoExchangeService/BotPublic/ReturnTicker?request=[NamePairs=BTC_WAGE]", 
    true, 
    function(data){
        var resultcrex = JSON.parse(data);
        if (resultcrex !== "undefined") {
            if (resultcrex) {
                var pricecrex = resultcrex.Tickers[0].Last
            }
            else {
                msg.reply("0")
            }
        }
    }
);

console.log(pricecrex);

这是因为Ajax请求是异步的
console.log()
在从请求接收响应之前执行,因此在
pricecrex
中设置值之前执行。所以您得到了未定义的

var pricecrex;

getDataFromAPI("https://api.crex24.com/CryptoExchangeService/BotPublic/ReturnTicker?request=[NamePairs=BTC_WAGE]", 
true, function(data) {
        var resultcrex = JSON.parse(data);
        if (resultcrex !== "undefined") {
            if (resultcrex) {
                pricecrex = resultcrex.Tickers[0].Last;
                print(pricecrex);
            }
            else {
                msg.reply("0")
            }
        }
    }
);

function print(data) {
    console.log(data);
}

Javascript的本质是在异步函数启动后继续运行代码。因此,您运行
getDataFromAPI()
,然后在运行时,解释器转到下一段代码,即您的
控制台.log(pricecrex)

因此,您可以直接在回调中运行
console.log(pricecrex)
function(data){}
,或者为了使事情更干净,将
console.log()
封装在一个函数中,并从回调中调用该函数

例如:

let someVar;

someAsync('someurl.com', (data) =>{
    someVar = data;
    callTheConsole()
})

function callTheConsole(){
     console.log(someVar)
}

而不是将值赋给变量。将其传递给另一个函数。因此,传递给另一个函数的值不是“未定义的”

function validation(pricecrex){
    console.log(pricecrex);
}
有关更多信息,请查看以下链接。提供了详细的信息和示例。

getDataFromAPI
异步获取数据,因此在为其分配实际值之前,您正在记录
pricecrex
,并且没有充分的理由声明
var pricecrex两次。第二个应该是一个简单的任务如果我不只是想记录数据呢?如果我调用getDataFromAPI来获取返回的数据会怎么样?我不需要调用print函数才能得到返回的数据吗?
getDataFromAPI("https://api.crex24.com/CryptoExchangeService/BotPublic/ReturnTicker?request=[NamePairs=BTC_WAGE]", 
    true, 
    function(data){
        var resultcrex = JSON.parse(data);
        if (resultcrex !== "undefined") {
            if (resultcrex) {
                var pricecrex = resultcrex.Tickers[0].Last;
                validation(pricecrex);
            }
            else {
                msg.reply("0")
            }
        }
    }
);