2016-11-29 6 views
0

Я пытаюсь написать свой первый Alexa Skill, и я делаю http-запрос, который отлично работает, однако я хотел бы обернуть это в функцию, которую я могу вызвать из своего основного кода.Вызов https.get с помощью nodejs из функции?

Это не работает, и я не совсем уверен, как я могу хранить ответ в переменную, вот мой код до сих пор:

function getValue(loc) { 
    var endpoint = 'URLHERE' 
    var something = "" 
    var body = "" 
    https.get(endpoint, (response) => { 
     response.on('data', (chunk) => { 
      body += chunk 
     }) 
     response.on('end',() => { 
      data = JSON.parse(body) 
      something = data.result.node.value; 
     }) 
    }) 
    return something; 
} 

Это на амазонке и с помощью лямбда для функций с помощью узла .js

, который я называю getValue('test') использованием

var result = getValue('test') 

он только что вернулся неопределенными.

Любые идеи? Спасибо

Я предполагаю, что его асинхронный вызов не устанавливает значение из-за обратного вызова, но я попытался реализовать это и не могу заставить его работать.

Благодаря

ответ

1

Вы возвращение из вашей функции до обратного вызова http.get, смешиваясь синхронным с поведением асинхронного.

Значит, ваша функция return ing something, которая еще не определена.

Попробуйте вместо этого:

function getValue(loc,cb) { 
    let endpoint = 'URLHERE' 
    let something = "" 
    let body = "" 
    https.get(endpoint, (response) => { 
     response.on('data', (chunk) => { 
      body += chunk 
     }) 
     response.on('end',() => { 
      data = JSON.parse(body) 
      cb(data.result.node.value); 
     }) 
    }) 
} 

getValue(test,(result)=>{ 
    //do something with result here; 
}); 
+0

Спасибо так много! После нескольких часов попытки этого обратного вызова наконец-то нажали! :) Спасибо xShirease – realtek