Переменная Javascript теряет значение, когда строка взята из проанализированного JSON - PullRequest
0 голосов
/ 24 января 2019

Я создал следующую функцию:

function buildSpeechletResponse(title, output, repromptText, shouldEndSession) {
return {
    outputSpeech: {
        type: 'PlainText',
        text: `${output}`,
    },
    card: {
        type: 'Simple',
        title: 'Bible Library',
        content: 'Bible Passage',
    },
    reprompt: {
        outputSpeech: {
            type: 'PlainText',
            text: repromptText,
        },
    },
    shouldEndSession,
    };
}

Когда я обычно вызываю свою функцию, ожидается ответ, все работает.Однако в следующем коде я делаю запрос GET и изменяю переменную в запросе GET, а затем использую мою функцию обратного вызова с измененной переменной.Когда я делаю это и проверяю выходной параметр в вызове buildSpeechletResponse, вывод становится пустым.

function getPassage(callback) {
    var url = 'privateurl';
    var body = '';
    var finalPassage = '';
    https.get(url, function(res) {
        console.log("Got response: " + res.statusCode);
        res.on('data', function(chunk) {
            body += chunk;
        });
        res.on('end', function() {
            var response = JSON.parse(body);
            finalPassage = JSON.stringify(response.passage);
            callback({}, buildSpeechletResponse('Session Ended', finalPassage, "", false));
            return response;
        });
    }).on('error', function(e) {
        console.log("Got error: " + e.message);
    })
    callback({}, buildSpeechletResponse('Session Ended', finalPassage, finalPassage, false));
}

Когда я проверяю, что такое finalPassage до того, как он передан в качестве параметра, я вижу, что это ожидаемыйстрока.Кажется, будто моя строка теряется при вызове buildSpeechletResponse?Я не уверен, почему это внезапно становится пустым.Когда я делаю точно такой же вызов с уже заданной строкой, такой как:

var finalPassage = '';
finalPassage = "rand";
callback({}, buildSpeechletResponse('Session Ended', finalPassage, "", false));

Вывод правильный и вывод равен "rand" в моей функции buildSpeechletResponse.Кажется, потому что я передаю переменную, где я назначаю ей строку из моего запроса GET, она потеряна?Я не понимаю, как или почему это было бы.

Я вызываю getPassage следующим образом:

function onIntent(intentRequest, session, callback) {
    console.log(`onIntent requestId=${intentRequest.requestId}, sessionId=${session.sessionId}`);

    const intent = intentRequest.intent;
    const intentName = intentRequest.intent.name;

    // Dispatch to your skill's intent handlers
    if (intentName === 'getPassage') {
        getPassage(callback);

Кто-нибудь знает какие-либо решения или что может быть не так с моим кодом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...