我是javascript世界的新手,并且一直在Google上对Actions进行修改。我有一个先前在运行的操作,但是在尝试简化代码后,我遇到了一个新错误,似乎无法弄清楚。该代码应该调用数据库,并根据用户选择的日期将信息返回给用户。
问题:该代码应该调用数据库,并根据用户选择的日期将信息返回给用户。当我使用axios调用URL时,意图似乎破裂了。当我测试功能时,我从Google Cloud Platform收到以下错误:“错误:未设置任何响应。这是否在未作为对意图处理程序的承诺返回的异步调用中使用?”
app.intent('Moon', (conv, {date}) => {
// Sets date to today if none given
if (!date) {
date = new Date().toISOString();
}
// Slices date string to match date format in database
const dateSlice = date.slice(5, 9);
// Call to row in dabase for the given date
function getData() {
return axios.get(`example.com/search?Date=${dateSlice}`);
}
return getData().then(res => {
res.data.map(con => {
conv.ask(`On X date there will be a ${con.Object1}`);
});
});
});
我对Promise的了解不多,但是等待似乎是问题所在。我不确定在没有这些对象的情况下如何才能使我的代码运行。我试图在返回之前插入Promise对象,但这使其余功能无法访问。我还检查了Axios是否有任何更新,但没有更新,我使用的是最新版本。错误是否与其中一项收益有关?
它可以与承诺有关,但是您似乎正确地处理了它们。
axios.get()
的呼叫正在返回一个承诺...getData()
...中返回的内容>getData().then()
块的一部分返回。我更怀疑这是一个逻辑问题。如果res.data
是一个空数组,那么将不会有任何对conv.ask()
的调用,因此您最终将不询问任何内容。
res.data
有两个以上的项目,也有问题。在这种情况下,您将产生一个错误,因为您已回复了两个以上的“简单”响应。
两种方式-您可能希望登录res
和/或res.data
以确保您恢复了所想的内容。