Javascript Api json返回“;“未定义”;

Javascript Api json返回“;“未定义”;,javascript,json,Javascript,Json,我目前正在运行代码- const request = require('request') const apiKey = 'XXXXXXXXXXXXXX' var dat; let url = 'http://api.worldweatheronline.com/premium/v1/marine.ashx' let qs = { q: '-34.48,150.92', format: 'json', apiKey } request({ url, qs }, (err

我目前正在运行代码-

const request = require('request')
const apiKey = 'XXXXXXXXXXXXXX'

var dat;
let url = 'http://api.worldweatheronline.com/premium/v1/marine.ashx'
let qs = {
    q: '-34.48,150.92',
    format: 'json',
    apiKey
}
request({ url, qs }, (err, response, body) => {
    if (err)
        return console.error(err)
    if (response.statusCode != 200)
        return console.error('status code is', response.statusCode)
    body = JSON.parse(body)
    dat = body.data.hourly[0].tempC


})
console.log(dat);
当我引用返回的API时,我期望得到15的响应

{
"data": {
    "request": [],
    "weather": [{ 
        "date": "2016-11-20",
        "astronomy": [],
        "maxtempC": "27",
        "maxtempF": "80",
        "mintempC": "15",
        "mintempF": "58",
        "hourly": [{
            "time": "0",
            "tempC": "15",
...
虽然我只得到
未定义的响应
。 为什么?
提前感谢。

您需要将console.log放入回调中,否则它将在回调返回服务器数据之前执行

const request = require('request')
const apiKey = 'XXXXXXXXXXXXXX'

var dat;
let url = 'http://api.worldweatheronline.com/premium/v1/marine.ashx'
let qs = {
q: '-34.48,150.92',
format: 'json',
apiKey
}
request({ url, qs }, (err, response, body) => {
if (err)
return console.error(err)
if (response.statusCode != 200)
return console.error('status code is', response.statusCode)
body = JSON.parse(body)
dat = body.data.hourly[0].tempC
console.log(dat);
})

异步函数调用这个问题不需要另一个答案。:-)