Dialogflow:是否在异步调用中使用

问题描述 投票:1回答:1

我是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是否有任何更新,但没有更新,我使用的是最新版本。错误是否与其中一项收益有关?

javascript node.js promise dialogflow actions-on-google
1个回答
1
投票

可以与承诺有关,但是您似乎正确地处理了它们。

  • axios.get()的呼叫正在返回一个承诺...
  • ...您要在getData() ...中返回的内容>
  • ...在[Moon] Intent处理程序中作为getData().then()块的一部分返回。
  • 我更怀疑这是一个逻辑问题。如果res.data是一个空数组,那么将不会有任何对conv.ask()的调用,因此您最终将不询问任何内容。

res.data有两个以上的项目,也有问题。在这种情况下,您将产生一个错误,因为您已回复了两个以上的“简单”响应。

两种方式-您可能希望登录res和/或res.data以确保您恢复了所想的内容。

© www.soinside.com 2019 - 2024. All rights reserved.