2017-10-11 7 views
2

Nous développons la compétence d'alexa en utilisant alexa-app, dans une de nos intentions nous essayons d'aller chercher des albums de facebook et sur le succès/échec nous voulons qu'lexlex réagisse en conséquence. Mais l'intention n'attend pas que l'appel FB soit terminé. Voici l'extrait de code que nous utilisons:L'intention d'Alexa n'attend pas la réponse d'api

function fetchAlbums(){ 
    return new Promise(resolve =>{ 
    FB.api("/me/albums", function (res) { 
    if (res && !res.error) { 
     // If we have data 
     if (res.data) { 
      resolve("Got Albums"); 
     } else { 
      // REPORT PROBLEM WITH PARSING DATA 
      resolve("Error getting albums"); 
     } 
    } else { 
     // Handle errors here. 
     resolve("Error hitting endpoint"); 
    } 
    }); 
}); 
} 

alexaApp.intent("readFeedIntent", { 
    "utterances": [ 
    "read my facebook feed", "read facebook feed", "read feed" 
    ] 
}, 
function(request, res1) { 
    // Again check if we have an access token 
    if(request.hasSession() && !accessToken){ 
    accessToken = request.data.session.user.accessToken; 
    FB.setAccessToken(accessToken); 
    } 
    if (accessToken) { 
    var session = request.getSession(); 
    fetchAlbums().then(function(data){ 
     console.log(data); 
     res1.say(data); 
    }); 
    } else { 
    res1.say(noAccessToken, tryLaterText).send(); 
    } 
}); 

Il est de ne pas jeter des erreurs, mais Alexa ne parle pas quoi que ce soit où je peux voir la réponse dans les journaux de la console.

Si j'ajoute: res1.say("Whatever!") à la fin de la fonction, Alexa répondra 'Whatever' en réponse à cette intention.

Répondre

0

Got it résolu mon moi-même:

au lieu de ceci:

fetchAlbums().then(function(data){ 
     console.log(data); 
     res1.say(data); 
}) 

vous devez le retourner, comme:

return fetchAlbums().then(function(data){ 
     console.log(data); 
     res1.say(data); 
})