我的alexa应用程序有问题。我对NodeJS和Alexa相当陌生,

这是我的问题。我有一个包含数组的dynamodb。从该数组中,我将从一个可以为我提供JSON数据的其他网站获取所有值。我将这些数据传递给模板,最后调用alexa say命令。

由于某些原因,除了说部分外,其他所有内容都运作良好。

我绝对希望您能阐明我所缺少的内容。

这是代码:

    app.intent('sayStockList', {
        'utterances': ['{|say stock list}']
      },
      function(req, res) {
        var stockInfoHelper = new StockInfoDataHelper();
        var currentUserId = req.userId;
        databaseHelper.readCodeList(currentUserId).then(function(currentJsonData) {
          var currentData = [];
          var toSay = '';
          console.log("1) Current Data= %j", currentJsonData);
          if (undefined === currentJsonData) {
            toSay = 'You don\'t have any code stored. To store a code say: Alexa, add code.';
          } else {
            currentData = currentJsonData['data'];
            return Promise.all(currentData.map(fn)).then(function(returnString) { //fn all return correctly
              console.log("2) Promise return : %s", returnString);
              res.say(returnString.toString()).shouldEndSession(false).send();
            }).catch(function(err) {
              console.log("3) Error: %s", err);
            });
          }
        }); // Promise readCodeList then end
        console.log("4) TEST 12 ");
        return true;
      }
    );// end app intent


这是日志输出:

    4) TEST 12
    1) Current Data= {"data":["data1","data2"],"userId":"xxxxxx"}
    Function getDataValue
    Function getDataValue
    2) Promise return : Return value for data1.  Return value for data2


谢谢你的帮助!

伊恩·雷米

最佳答案

在了解...


app.intent回调应返回<promise>,而不是true
You don\'t have any code stored ...消息不应该挂起


...下面的重写更有意义:

app.intent('sayStockList', {
    'utterances': ['{|say stock list}']
}, function(req, res) {
    return databaseHelper.readCodeList(req.userId)
//  ^^^^^^
    .then(function(currentJsonData) {
        console.log("1) Current Data= %j", currentJsonData || null);
        if (!currentJsonData || !currentJsonData.data || currentJsonData.data.length === 0) { // better safety
            return 'You don\'t have any code stored. To store a code say: Alexa, add code.';
        //  ^^^^^^
        } else {
            return Promise.all(currentJsonData.data.map(fn))
            .then(function(results) {
                console.log("2) Promise return : %s", results.toString());
                return results.toString();
            //  ^^^^^^
            });
        }
    })
    .then(function(sayString) { // `sayString` is either the results or the `'You don\'t have any code stored. ...'` message.
        res.say(sayString).shouldEndSession(false).send();
    })
    .catch(function(err) {
        console.log("3) Error: %s", err);
        res.say('Sorry, something went wrong').shouldEndSession(false).send(); // keep user informed.
    });
}); // end app intent

关于node.js - Alexa 说不能与 promise ,休息和dynamodb组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49246914/

10-11 18:19