Node.js: forEach 箭头语句剧
Node.js: forEach arrow statement drama
我正在尝试让下面的代码片段正常工作,但出于某种原因,我无法让脚本识别 "attributes.States.element" 行的 "element" 部分。
是不是因为有个“.”在行?
如果我要制作 forEach 部分的第一行 "console.log(element);",它会完美地工作。
如果我按照下面的方式使用它,它会无法识别 "element"。
此代码段用于 Node.js 8.10 中的一项 Alexa 技能。
** 编辑以在 Alexa 代码中包含整个 Handler 语句。
如有任何帮助,我们将不胜感激!
const HelloWorldIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent';
},
async handle(handlerInput) {
const attributesManager = handlerInput.attributesManager;
const attributes = await attributesManager.getPersistentAttributes() || {};
const speakOutput = 'Hello World!';
attributes.States = {
};
const stateNames = ['Alabama', 'New York'];
stateNames.forEach(element => {
attributes.States.element = {
'found' : 'no',
'history' : 'no'
};
});
attributesManager.setPersistentAttributes(attributes);
await attributesManager.savePersistentAttributes();
return handlerInput.responseBuilder
.speak(speakOutput)
//.reprompt('add a reprompt if you want to keep the session open for the user to respond')
.getResponse();
}
};
如果您希望在 attributes.States
中引用名为 'Alabama' 或 'New York' 的 属性,那么您应该使用 attributes.States[element]
.
此处的区别在于 element
被用作值而不是 属性 名称。
const HelloWorldIntentHandler = {
canHandle(handlerInput) {
return (
Alexa.getRequestType(handlerInput.requestEnvelope) === "IntentRequest" &&
Alexa.getIntentName(handlerInput.requestEnvelope) === "HelloWorldIntent"
);
},
async handle(handlerInput) {
const attributesManager = handlerInput.attributesManager;
const attributes =
(await attributesManager.getPersistentAttributes()) || {};
const speakOutput = "Hello World!";
// Add the following condition to avoid changing the data if something is returned from the getPersistentAttributes()
if (!attributes.States) {
attributes.States = {};
}
const stateNames = ["Alabama", "New York"];
stateNames.forEach(element => {
attributes.States[element] = {
found: "no",
history: "no"
};
});
attributesManager.setPersistentAttributes(attributes);
await attributesManager.savePersistentAttributes();
return (
handlerInput.responseBuilder
.speak(speakOutput)
//.reprompt('add a reprompt if you want to keep the session open for the user to respond')
.getResponse()
);
}
};
我正在尝试让下面的代码片段正常工作,但出于某种原因,我无法让脚本识别 "attributes.States.element" 行的 "element" 部分。
是不是因为有个“.”在行?
如果我要制作 forEach 部分的第一行 "console.log(element);",它会完美地工作。
如果我按照下面的方式使用它,它会无法识别 "element"。
此代码段用于 Node.js 8.10 中的一项 Alexa 技能。
** 编辑以在 Alexa 代码中包含整个 Handler 语句。
如有任何帮助,我们将不胜感激!
const HelloWorldIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent';
},
async handle(handlerInput) {
const attributesManager = handlerInput.attributesManager;
const attributes = await attributesManager.getPersistentAttributes() || {};
const speakOutput = 'Hello World!';
attributes.States = {
};
const stateNames = ['Alabama', 'New York'];
stateNames.forEach(element => {
attributes.States.element = {
'found' : 'no',
'history' : 'no'
};
});
attributesManager.setPersistentAttributes(attributes);
await attributesManager.savePersistentAttributes();
return handlerInput.responseBuilder
.speak(speakOutput)
//.reprompt('add a reprompt if you want to keep the session open for the user to respond')
.getResponse();
}
};
如果您希望在 attributes.States
中引用名为 'Alabama' 或 'New York' 的 属性,那么您应该使用 attributes.States[element]
.
此处的区别在于 element
被用作值而不是 属性 名称。
const HelloWorldIntentHandler = {
canHandle(handlerInput) {
return (
Alexa.getRequestType(handlerInput.requestEnvelope) === "IntentRequest" &&
Alexa.getIntentName(handlerInput.requestEnvelope) === "HelloWorldIntent"
);
},
async handle(handlerInput) {
const attributesManager = handlerInput.attributesManager;
const attributes =
(await attributesManager.getPersistentAttributes()) || {};
const speakOutput = "Hello World!";
// Add the following condition to avoid changing the data if something is returned from the getPersistentAttributes()
if (!attributes.States) {
attributes.States = {};
}
const stateNames = ["Alabama", "New York"];
stateNames.forEach(element => {
attributes.States[element] = {
found: "no",
history: "no"
};
});
attributesManager.setPersistentAttributes(attributes);
await attributesManager.savePersistentAttributes();
return (
handlerInput.responseBuilder
.speak(speakOutput)
//.reprompt('add a reprompt if you want to keep the session open for the user to respond')
.getResponse()
);
}
};