2017-11-20 14 views
0

私はこのカスタムAlexaスキルを一日書きましたが、非常に小さいものに固執しています。変数を使用する場合、配列から値を取り出すことができません。コードplaces[theplace].pincodeは、UNDEFINEDを返します。変数を使用するときに配列から値を引き出すことができません

任意のポインタ?ここに私が使用しているコード全体があります。

// 1. Text strings 

var languageStrings = { 
    'en': { 
     'translation': { 
      'WELCOME' : "Welcome to Pincode search!", 
      'HELP' : "Hi! you can ask me the pin code for any place you want. For example say Tell me the pin code for mumbai", 
      'ABOUT' : "This is an Alexa Skill.", 
      'STOP' : "Bye!" 
     } 
    } 
}; 

var places = { 
    "mumbai": { 
     "pincode": "400001", 
    }, 
    "delhi": { 
     "pincode": "110001", 
    }, 
}; 

// 2. Skill Code 

var Alexa = require('alexa-sdk'); 
exports.handler = function(event, context, callback) { 
    var alexa = Alexa.handler(event, context); 
    // alexa.appId = 'amzn1.echo-sdk-ams.app.1234'; 
    alexa.resources = languageStrings; 
    alexa.registerHandlers(handlers); 
    alexa.execute(); 
}; 

var handlers = { 
    'LaunchRequest': function() { 
     this.emit(':tell', this.t('WELCOME') + ' ' + this.t('HELP')); 
    }, 

    'getPlaceIntent': function() { 
     var theplace = this.event.request.intent.slots.place.value; 
     var thepincode = places[theplace]['pincode']; 
     this.emit(':tell', 'The pin code for '+ theplace + ' is ' + thepincode); 

    }, 

    'AMAZON.HelpIntent': function() { 
     this.emit(':ask', this.t('HELP')); 
    }, 
    'AMAZON.NoIntent': function() { 
     this.emit('AMAZON.StopIntent'); 
    }, 
    'AMAZON.CancelIntent': function() { 
     this.emit(':tell', this.t('STOP')); 
    }, 
    'AMAZON.StopIntent': function() { 
     this.emit(':tell', this.t('STOP')); 
    } 
}; 
+0

「theplace」の初期設定で 'this'の値が悪いことがほとんど問題ではないため、未定義の動作です。 'getPinCodeIntent'ハンドラに値をバインドするコードがありますか?私は事実ではない疑いがあります –

+0

@JonathanBrooks明確にするためにコード全体を貼り付けました。 – powerd

+0

私は 'alexa.registerHandlers(ハンドラ)'が 'this'に値を束縛すると思われるコードであると仮定しています。あなたは 'getPlaceIntent'関数で' JSON.stringify(this) 'をロギングしようとしましたか?それは問題を発見するのを助けることができる –

答えて

0

これは修正されました。

// 1. Text strings 
var languageStrings = { 
    'en': { 
     'translation': { 
      'WELCOME' : "Welcome to Pincode search!", 
      'HELP' : "You can ask me the pin code for any place. For example, you can say 'Pin code for Mumbai'", 
      'ABOUT' : "This is an Alexa Skill created with NodeJS.", 
      'STOP' : "Bye!" 
     } 
    } 
}; 

var places = { 
    "mumbai": { 
     "pincode": "400001", 
    }, 
    "delhi": { 
     "pincode": "110001", 
    }, 
}; 

// 2. Skill Code 

var Alexa = require('alexa-sdk'); 
exports.handler = function(event, context, callback) { 
    var alexa = Alexa.handler(event, context); 
    // alexa.appId = 'amzn1.echo-sdk-ams.app.1234'; 
    alexa.resources = languageStrings; 
    alexa.registerHandlers(handlers); 
    alexa.execute(); 
}; 

var handlers = { 
    'LaunchRequest': function() { 
     this.emit(':tell', this.t('WELCOME') + ' ' + this.t('HELP')); 
    }, 

    'getPlaceIntent': function (intent) { 
     var theplace = this.event.request.intent.slots.place.value.toLowerCase(); 
     var thepincode = places[theplace].pincode; 
     this.emit(':tell', 'The pin code for ' + theplace + ' is ' + thepincode + '.'); 
    }, 

    'AMAZON.HelpIntent': function() { 
     this.emit(':ask', this.t('HELP')); 
    }, 
    'AMAZON.NoIntent': function() { 
     this.emit('AMAZON.StopIntent'); 
    }, 
    'AMAZON.CancelIntent': function() { 
     this.emit(':tell', this.t('STOP')); 
    }, 
    'AMAZON.StopIntent': function() { 
     this.emit(':tell', this.t('STOP')); 
    } 
}; 
-1

私はあなたが配列から価値を得ようとしていると思います。 'places'は配列ではなくオブジェクトです。 私が誤っていない場合は、代わりにplaces.mumbai.pincodeを実行してください。

+0

変数はすべての都市で有効なので、変数を使用しています。あなたは地名からピンコード値を得る他の方法を提案することはできますか? – powerd

+0

OPの構文は、実際にオブジェクトプロパティに動的にアクセスできる*唯一の方法です。あなたはとても間違っている –

関連する問題