0

У меня есть функция, в которой я забирающий firebase значения данных, т.е. контакт:AWS лямбда nodejs доступ значения асинхронной функции в другой функции асинхронной

function firebaseData (callback) { 
    if(firebase.apps.length == 0) { 
    firebase.initializeApp({ 
     serviceAccount: "./Sample1-bc6d1ce099d8.json", 
     databaseURL:"https://sample1-74bc2.firebaseio.com/" 
    }); 
    } 
    var ref = firebase.database().ref(); 
    var usersRef = ref.child('users'); 

    usersRef.once('value').then(function (snap) { 
    snap.forEach(function(childSnapshot) { 
     var childKey = childSnapshot.val(); 
     var contact = childKey.Contact; 
     callback(contact) 
    }); 
    }); 
} 

То, что я хочу, чтобы использовать этот контакт значение данных в другой функции это место CONTACT:

function getContactFromSession(intent, session, callback) { 
    const repromptText = null; 
    const sessionAttributes = {}; 
    let shouldEndSession = false; 
    let speechOutput = "amy's contact is"+CONTACT; 

    // Setting repromptText to null signifies that we do not want to reprompt the user. 
    // If the user does not respond or says something that is not understood, the session 
    // will end. 

    callback(
    sessionAttributes, 
    buildSpeechletResponse(intent.name, speechOutput, repromptText, shouldEndSession) 
    );  
} 

Как это можно сделать, может ли кто-нибудь мне предложить?

+0

Вы можете вызвать функцию 'getContactFromSession (цель, сеанс, обратный вызов)' в функции userRef.once ('value') 'от firebase? –

+0

@AmreshVenugopal Ya, но в конечном итоге контактная ценность должна быть получена в getContactFromSession (намерение, сеанс, обратный вызов) –

ответ

0

Возможно, что-то вроде этого? Вызвать обратный вызов getContactFromSession() внутри обратного вызова firebaseData().

function getContactFromSession(intent, session, callback) { 
    const repromptText = null; 
    const sessionAttributes = {}; 
    let shouldEndSession = false; 

    firebaseData(function (contact) { 
    let speechOutput = "amy's contact is " + contact; 
    callback(
     sessionAttributes, 
     buildSpeechletResponse(intent.name, speechOutput, repromptText, shouldEndSession) 
    ); 
    })  
} 

Использование обещаний может помочь сделать его более читаемым.

+0

спасибо, что я пробовал это раньше, но вызов вызывает ошибку: «Ответ недействителен» –

+0

Есть ли другой способ сделать это? –