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

时间:2018-10-27 16:27:07

标签: javascript

我想知道我是否可以在这里得到一些帮助,到目前为止我还不是一个熟练的编码人员,但是我试图在函数之外检索结果,并且日志中的结果是未定义

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

3 个答案:

答案 0 :(得分:6)

这是因为Ajax请求是异步的。 class DeleteFolder: folders = [] def get_folder_in_directory(self, directorypath, flag): # # Perform Operation and derive folders value # print(self.folders) return self.folders.sort() def delete_folders(self, directorypath, flag): linked_folders = self.get_folder_in_directory( directorypath, flag) print(linked_folders) p1 = DeleteFolder() p1.delete_folders("Some Folder Path.", True) 在收到来自请求的响应之前执行,因此在console.log()中设置值之前执行。所以你得到pricecrex

undefined

答案 1 :(得分:1)

一旦启动异步功能,Javascript的本质就是继续运行代码。因此,您运行getDataFromAPI(),然后运行,解释程序将转到下一段代码,即您的console.log(pricecrex)

因此,您可以直接在回调console.log(pricecrex)中运行function(data){},或者为了保持环境整洁,请将console.log()包装在一个函数中,然后从回调中调用该函数。

示例:

let someVar;

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

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

答案 2 :(得分:0)

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

function validation(pricecrex){
    console.log(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;
                validation(pricecrex);
            }
            else {
                msg.reply("0")
            }
        }
    }
);

有关更多信息,请查看以下链接。提供带有示例的详细信息。 How to return the response from an asynchronous call?