Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript helperClass.js返回的值未返回到index.js_Javascript_Node.js_Bluebird_Alexa Skills Kit - Fatal编程技术网

Javascript helperClass.js返回的值未返回到index.js

Javascript helperClass.js返回的值未返回到index.js,javascript,node.js,bluebird,alexa-skills-kit,Javascript,Node.js,Bluebird,Alexa Skills Kit,前言:我是JavaScript新手。如果这个问题愚蠢得惊人,那就是原因之一 开始更新 我在挂国旗之前找到了问题的答案。我用try catch块解决了这个问题。此答案不引用try-catch块 结束更新 我试图从头开始创建一个Alexa项目(至少没有Amazon的模板)。我已经编写了应用程序的“胆量”,并用chai测试了我的功能。事情进展得很顺利,直到我试图达成一些意向 我可以看到我的意图是基于我在helperClass中抛出的console.log语句发送的,但是返回值没有返回到我的index

前言:我是JavaScript新手。如果这个问题愚蠢得惊人,那就是原因之一

开始更新

我在挂国旗之前找到了问题的答案。我用
try catch
块解决了这个问题。此答案不引用
try-catch

结束更新

我试图从头开始创建一个Alexa项目(至少没有Amazon的模板)。我已经编写了应用程序的“胆量”,并用
chai
测试了我的功能。事情进展得很顺利,直到我试图达成一些意向

我可以看到我的意图是基于我在
helperClass
中抛出的
console.log
语句发送的,但是返回值没有返回到我的
index.js
文件中

两个问题:

  • 我搞砸了什么
  • 我怎么修理它
  • 以下是我所做的: 基于此,我四处寻找,看看我的
    index.js
    文件头中发生了什么,我看到了以下内容:

    var Alexa = require('alexa-app');
    
    所以我去了
    alexa应用程序
    ,看到它使用了
    bluebird
    ,这向我表明我正在处理一个
    promise
    问题。此外,当我发送一个有效的请求时,我在日志中看到了这一点:

    preRequest fired
    postRequest fired
    
    当请求不起作用时,我只看到:

    preRequest fired
    
    我用的是大书呆子农场

    以下是我在
    index.js
    文件中的问题
    intent

    app.intent('getDaysFromNow', {
      'slots': {
            'INPUTDATE' : 'AMAZON.DATE'
      },
        'utterances': ['{|number of|how many} {days} {until|from|since} {|now|today} {|is|was} {-|INPUTDATE}'] // almost perfect
    },
      function(req, res) {
        console.log('app.intent getDaysFromNow fired');
        //get the slot
        var inputDate = req.slot('INPUTDATE');
        var reprompt = 'Ask me how many days until or from a specified date.';
        if (_.isEmpty(inputDate)) {
            console.console.log('app.intent daysFromNow blank request');
          var prompt = 'I didn\'t hear the date you want.';
          res.say(prompt).reprompt(reprompt).shouldEndSession(false);
          return true;
        } else {
            console.log('getDaysFromNow slot is not empty.');
          var dateHelper = new DateHelper();
          dateHelper.getDaysFromNow(inputDate).then(function(daysFromNow) { 
            console.log(daysFromNow);
            res.say(dateHelper.formatDaysFromNowResponse(daysFromNow)).send(); // FIXME
          }).catch(function(err) {
            console.log(err.statusCode);
            var prompt = 'Hmm...I don\'t have a date for that ' + inputDate;
            res.say(prompt).reprompt(reprompt).shouldEndSession(false).send();
          });
          return false;
        }
      }
    );
    
    我知道它正在被发送,但是值没有返回到
    index.js
    。我想我有退货问题。这是我的
    helperClass.js
    中的函数,它的返回不会返回到
    index.js

        // Takes AMAZON.DATE string as its argument
    DateHelper.prototype.getDaysFromNow = function(inputDate) {
    
        if (isValidDate(inputDate)) {       // validate it
            // if it's valid, run the function
            inputDate = moment(inputDate, "YYYY-MM-DD").startOf('day'); // inputDate starts as a string, recast as a moment here
            // create currentDate moment from current Date()
            var currentDate = moment(new Date()).startOf('day');
    
            // Calculate daysFromNow here
            var daysFromNow = inputDate.diff(currentDate, 'days');
            console.log("\t" + 'daysFromNow = ' + daysFromNow);
    
            // ORIGINAL CODE
            // return daysFromNow;
    
            // EXPERIMENTAL CODE
            return this.daysFromNow.then(
                function(response) {
                    return response.body;
                }
            );
        } else {
            // throw an error
            throw new Error("getDaysFromNow(): argument must be valid AMAZON.DATE string");
        }
    };
    

    谢谢你的阅读。我欢迎你的建议。

    事实证明,这不是从
    helperClass
    发送返回的方式。问题是最初是如何打电话的

    对于
    helperClass
    ,我恢复到原来的返回值

        // This is the return from `helperClass`
        return daysFromNow;
    
    index.js
    类中,我在
    try catch
    块中调用了
    helperClass
    ,如下所示:

    app.intent('getDaysFromNow', {
      'slots': {
        'INPUTDATE': 'AMAZON.DATE'
      },
      'utterances': ['{|number of|how many} {days} {until|from|since} {|now|today} {|is|was} {-|INPUTDATE}'] // almost perfect
    },
      function(req, res) {
        console.log('app.intent getDaysFromNow fired');
        //get the slot
        var inputDate = req.slot('INPUTDATE');
        var reprompt = 'Ask me how many days until or from a specified date.';
        if (_.isEmpty(inputDate)) {
          console.log('app.intent daysFromNow blank request');
          var prompt = 'I didn\'t hear the date you want.';
          res.say(prompt).reprompt(reprompt).shouldEndSession(false);
          return true;
        } else {
          // ** CHANGED: This is the part that changed. **
          console.log('getDaysFromNow slot is not empty.');
          var dateHelper = new DateHelper();
          try {
            var daysFromNow = dateHelper.getDaysFromNow(inputDate);
            res.say(dateHelper.formatDaysFromNowResponse(daysFromNow)).send(); 
          } catch (error) {
            console.log("error", error);
            var prompt = 'Hmm...I don\'t have a date for that ' + inputDate;
            res.say(prompt).reprompt(reprompt).shouldEndSession(false).send();
          }
          return false;
        }
      }
    );
    

    如果遇到同样的问题,希望有人会觉得这很有帮助。

    可能重复@rohithpr我回答了我自己的问题。