【发布时间】:2021-01-18 22:39:45
【问题描述】:
我有一个名为 kasaScenes 的函数和特定的嵌套“场景”函数,它们根据我需要激活的“场景”执行 POST。 (例如:sceneTooCold、sceneTooHot 等)。因此,稍后在该过程中,将传感器的温度与阈值进行比较,如果它符合特定标准(例如:如果 sensor.temperature
function kasaScenes() {
function sceneTooCold() {
post_content_gAC = '{"method":"passthrough","params":{"deviceId":"' + gACID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOff + '}}}","token":"' + kasa_token + '"}}';
post_content_gExhaust = '{"method":"passthrough","params":{"deviceId":"' + gExhaustID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOff + '}}}","token":"' + kasa_token + '"}}';
post_content_gFans = '{"method":"passthrough","params":{"deviceId":"' + gFansID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
post_content_gHeater = '{"method":"passthrough","params":{"deviceId":"' + gHeaterID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
post_content_gCeiling = '{"method":"passthrough","params":{"deviceId":"' + gCeilingID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
//<~POST Return~>
returnValue_gAC = KumoApp.httpCallExternal(post_url, "POST", post_content_gAC);
returnValue_gExhaust = KumoApp.httpCallExternal(post_url, "POST", post_content_gExhaust);
returnValue_gFans = KumoApp.httpCallExternal(post_url, "POST", post_content_gFans);
returnValue_gHeater = KumoApp.httpCallExternal(post_url, "POST", post_content_gHeater);
returnValue_gCeiling = KumoApp.httpCallExternal(post_url, "POST", post_content_gCeiling);
}
function sceneTooHot() {
post_content_gAC = '{"method":"passthrough","params":{"deviceId":"' + gACID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
post_content_gExhaust = '{"method":"passthrough","params":{"deviceId":"' + gExhaustID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
post_content_gFans = '{"method":"passthrough","params":{"deviceId":"' + gFansID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
post_content_gHeater = '{"method":"passthrough","params":{"deviceId":"' + gHeaterID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOff + '}}}","token":"' + kasa_token + '"}}';
post_content_gCeiling = '{"method":"passthrough","params":{"deviceId":"' + gCeilingID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
//<~POST Return~>
returnValue_gAC = KumoApp.httpCallExternal(post_url, "POST", post_content_gAC);
returnValue_gExhaust = KumoApp.httpCallExternal(post_url, "POST", post_content_gExhaust);
returnValue_gFans = KumoApp.httpCallExternal(post_url, "POST", post_content_gFans);
returnValue_gHeater = KumoApp.httpCallExternal(post_url, "POST", post_content_gHeater);
returnValue_gCeiling = KumoApp.httpCallExternal(post_url, "POST", post_content_gCeiling);
}
function sceneNormalTemp() {
post_content_gCeiling = '{"method":"passthrough","params":{"deviceId":"' + gCeilingID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOff + '}}}","token":"' + kasa_token + '"}}';
post_content_gExhaust = '{"method":"passthrough","params":{"deviceId":"' + gExhaustID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOff + '}}}","token":"' + kasa_token + '"}}';
post_content_gFans = '{"method":"passthrough","params":{"deviceId":"' + gFansID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
post_content_gHeater = '{"method":"passthrough","params":{"deviceId":"' + gHeaterID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOff + '}}}","token":"' + kasa_token + '"}}';
//<~POST Return~>
returnValue_gAC = KumoApp.httpCallExternal(post_url, "POST", post_content_gAC);
returnValue_gExhaust = KumoApp.httpCallExternal(post_url, "POST", post_content_gExhaust);
returnValue_gFans = KumoApp.httpCallExternal(post_url, "POST", post_content_gFans);
returnValue_gHeater = KumoApp.httpCallExternal(post_url, "POST", post_content_gHeater);
}
function sceneTooWet() {
post_content_gCeiling = '{"method":"passthrough","params":{"deviceId":"' + gCeilingID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
post_content_gExhaust = '{"method":"passthrough","params":{"deviceId":"' + gExhaustID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
post_content_gFans = '{"method":"passthrough","params":{"deviceId":"' + gFansID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
post_content_gDehumidifier = '{"method":"passthrough","params":{"deviceId":"' + gDehumidifierID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOn + '}}}","token":"' + kasa_token + '"}}';
post_content_gHumidifier = '{"method":"passthrough","params":{"deviceId":"' + gHumidifierID + '","requestData":"{\\"system\\":{\\"set_relay_state\\":{\\"state\\":' + stateOff + '}}}","token":"' + kasa_token + '"}}';
//<~POST Return~>
returnValue_gCeiling = KumoApp.httpCallExternal(post_url, "POST", post_content_gCeiling);
returnValue_gExhaust = KumoApp.httpCallExternal(post_url, "POST", post_content_gExhaust);
returnValue_gFans = KumoApp.httpCallExternal(post_url, "POST", post_content_gFans);
returnValue_gDehumidifier = KumoApp.httpCallExternal(post_url, "POST", post_content_gDehumidifier);
returnValue_gHumidifier = KumoApp.httpCallExternal(post_url, "POST", post_content_gHumidifier);
}
}
【问题讨论】:
-
你没有从父函数返回任何东西,所以现在这根本不可能。将父函数转换为具有键/值对的对象,其中键为sceneTooCold、sceneTooHot 等及其值作为相应的函数,或者将
kasaScenes创建为一个类,并将相应的函数作为其方法。 -
我不明白这个问题。除了
if (sensor.temperature < 70) { sceneTooCol(); } else if (sensor.temperature > 100) { sceneTooHot(); } else { sceneNormalTemp(); },你还需要什么 -
@rahulpsd18 这是有道理的。我对 js 还很陌生,所以我不知道我需要返回一些东西。我实际上不需要返回任何值,而只需要那个特定部分(我认为应该是一个函数)来运行 POST。感谢您的指导!
-
@Barmar 所以把它放在外部函数之外的其他地方会起作用吗?我正在尝试,但不断收到“TypeError:'sceneTooDry()' 不是函数”。
-
不,应该在外层函数里面。
标签: javascript function nested-function