序文:私は JavaScript を初めて使用します。この質問が驚くほどばかげている場合、それが理由 (の一部) です。
更新を開始
だまされてフラグを立てる前に、私の質問に対する答えを見つけました。try-catch
ブロックで解決しました。try-catch
この回答はブロックを参照していません。
更新終了
Alexa プロジェクトをゼロから作成しようとしています (少なくとも、Amazon のテンプレートは使用しません)。私はアプリの「ガッツ」を書き、自分の機能を でテストしましたchai
。いくつかのインテントを接続しようとするまで、物事は順調に進んでいました。
console.log
にスローしたステートメントに基づいてインテントが送信されていることがわかりますhelperClass
が、戻り値がindex.js
ファイルに返されていません。
2 つの質問:
- 私は何をいじっていますか?
- どうすれば修正できますか?
これ
に基づいて、index.js
ファイルのヘッダーで何が起こっているかを調べたところ、次のことがわかりました。
var Alexa = require('alexa-app');
だから私は行ってalexa-app
、それが を使用しているのを見ました。これはbluebird
、私がpromise
問題に対処していることを示唆しています。さらに、機能するリクエストを送信すると、ログに次のように表示されました。
preRequest fired
postRequest fired
リクエストが機能しない場合、次のように表示されます。
preRequest fired
Big Nerd Ranch の「Developing Alexa Skills Locally with Node.js」を使用しています。
intent
これが私のindex.js
ファイルの問題です:
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");
}
};
読んでくれてありがとう。あなたの提案を歓迎します。