Alexa 意图不等待 api 响应
Alexa intent is not waiting for the api response
我们正在使用 alexa-app 开发 alexa 技能,我们的目的之一是尝试从 facebook 获取相册,在 success/failure 我们希望 alexa 做出相应的响应。但意图不是等待 FB 调用完成。下面是我们使用的代码片段:
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 会说 'Whatever' 以响应此意图。
我自己解决了:
而不是这个:
fetchAlbums().then(function(data){
console.log(data);
res1.say(data);
})
你必须 return 它,例如:
return fetchAlbums().then(function(data){
console.log(data);
res1.say(data);
})
我们正在使用 alexa-app 开发 alexa 技能,我们的目的之一是尝试从 facebook 获取相册,在 success/failure 我们希望 alexa 做出相应的响应。但意图不是等待 FB 调用完成。下面是我们使用的代码片段:
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 会说 'Whatever' 以响应此意图。
我自己解决了:
而不是这个:
fetchAlbums().then(function(data){
console.log(data);
res1.say(data);
})
你必须 return 它,例如:
return fetchAlbums().then(function(data){
console.log(data);
res1.say(data);
})