はじめに: JavaScriptの新機能です。この質問が驚くほど愚かな場合、それは理由の一部です。helperClass.jsからの戻り値がindex.jsに戻らない
を更新
開始私はだまされやすい人として前にフラグの私の質問への答えを見つけました。私はtry-catch
ブロックで解決しました。この回答はブロックtry-catch
を参照していません。
How do I return the response from an asynchronous call?
エンド更新
私はスクラッチ(まあ、少なくともAmazonのテンプレートのいずれかなし)からAlexaのプロジェクトを作成しようとしています。私はアプリの "勇気"を書いており、私はchai
で自分の機能をテストしました。私はいくつかの意図を結びつけようとするまで、物事はうまくいっていました。
helperClass
にスローされたconsole.log
ステートメントに基づいて送信されているのがわかりますが、返信値ではindex.js
ファイルに戻っていません。
つの質問:
- は、私が何をいじくるのですか?
- どうすれば修正できますか?ここで
は、私がやったものだ。それに基づいて が、私は私のindex.js
ファイルのヘッダーに何が起こっているかを確認するために周りに掘って、私はこれを見た:
var Alexa = require('alexa-app');
は、だから私は
alexa-app
に行ってきました
bluebird
を使用していることがわかりました。これは、私が
promise
問題を扱っていることを示唆しています。私は作品のリクエストを送信するときさらに、私がログにこれを見た:
preRequest fired
postRequest fired
要求が動作しない場合は、私だけを参照してください。
preRequest fired
私はビッグオタクランチの"Developing Alexa Skills Locally with Node.js"を使用しています。私はそれが送られたばかりだが、値が戻っ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
ファイルの私の問題intent
です。私は帰りの問題があると思う。ここではそのリターン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.js
内の関数は読みいただきありがとうございます。私はあなたの提案を歓迎します。
[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-コール) – rohithpr
@rohithpr私は自分の質問に答えました。 – Adrian