我想知道我是否可以在这里得到一些帮助,到目前为止我还不是一个熟练的编码人员,但是我试图在函数之外检索结果,并且日志中的结果是未定义
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);
答案 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??