2017-10-11 89 views
2

我们正在使用alexa-app开发alexa技巧,我们试图从facebook获取相册并在成功/失败时我们希望alexa响应相应的意图。但意图不等待FB电话完成。下面是我们使用的代码片段:Alexa意图并未等待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(); 
    } 
}); 

它不抛出任何错误,但Alexa也不是讲任何东西在那里我可以看到在控制台日志的响应。

如果我在函数的末尾添加:res1.say("Whatever!"),那么Alexa将会根据这个意图说出'无论'。

回答

0

得到它解决了我自己:

,而不是这样的:

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

你要退回去,如:

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