【问题标题】:How to return value from json in javascript for Alexa through promise?如何通过promise从javascript中的json为Alexa返回值?
【发布时间】:2019-08-05 17:29:07
【问题描述】:

我是 javascript 新手,所以我不能 100% 确定我的代码的执行情况 使用 promise 方法从 api 的 json 输出中获取信息。

要从 json 中访问汽车的名称,我做了以下操作:

  let a, carName;
  await https_post(option,body)
    .then((json) => {
          a = JSON.parse(json); 
          carName = a.Car[0].Model; 
          return carName; })
    .catch((err) => { console.log(err); });

我希望它返回汽车的名称,我希望 alexa 说出这个名称,那么我应该把 .speak(carName) 放在哪里? .所以这应该像 CR-V 或 Accord 一样

【问题讨论】:

  • I expect it to ... 那么会发生什么呢?
  • 尝试 console.log(json),看看有什么反应
  • @NayanPatel 我应该在哪里添加?
  • @MeredithGrey 我已经添加了答案,请尝试一下。

标签: javascript node.js json async-await alexa-skill


【解决方案1】:

我认为为了从 API 读取 JSON 响应,您需要这样的东西。

let a, carName;
await https_post(option,body)
.then((json) => {
      a = JSON.parse(json.data); 
      carName = a.Car[0].Model; 
      return carName; })
.catch((err) => { console.log(err); });

请注意,我在使用 JSON.parse 时将 .data 添加到 json。如果我没记错的话,阅读内容时需要参考data

【讨论】:

  • 我想让 Alexa 说出返回的汽车名称,那么我应该把 .speak(carName) 放在哪里?
【解决方案2】:

将 async 与这样的 Promise 混合使用有点奇怪。

如果你想直接使用 Promises,那么放弃 async。

如果你想使用异步语法,那么写成这样:

try {
  const cars = JSON.parse(await https_post(option, body));
  const carName = cars.Car[0].Model; 
  return carName;
} catch(err) {
  console.log(err);
}

【讨论】:

  • 我想让 Alexa 说出返回的汽车名称,那么我应该把 .speak(carName) 放在哪里?
【解决方案3】:
const getCarModel = async ()=> {
 try {
   const cars = JSON.parse(await https_post(option, body));
   console.log(cars);
   return cars.Car[0].Model; 
 } catch(error) {
  console.log(error);
 }
}

由于这个函数返回promise,你需要处理它。

如果这个函数没有返回汽车模型,你会在控制台中获取整个对象,找到你找到对象的关卡,如果没有得到,尝试用汽车对象评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多