【问题标题】:How to Call a Specific Nested Function from Several如何从多个调用特定的嵌套函数
【发布时间】:2021-01-18 22:39:45
【问题描述】:

我有一个名为 kasaScenes 的函数和特定的嵌套“场景”函数,它们根据我需要激活的“场景”执行 POST。 (例如:sceneTooColdsceneTooHot 等)。因此,稍后在该过程中,将传感器的温度与阈值进行比较,如果它符合特定标准(例如:如果 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 &lt; 70) { sceneTooCol(); } else if (sensor.temperature &gt; 100) { sceneTooHot(); } else { sceneNormalTemp(); },你还需要什么
  • @rahulpsd18 这是有道理的。我对 js 还很陌生,所以我不知道我需要返回一些东西。我实际上不需要返回任何值,而只需要那个特定部分(我认为应该是一个函数)来运行 POST。感谢您的指导!
  • @Barmar 所以把它放在外部函数之外的其他地方会起作用吗?我正在尝试,但不断收到“TypeError:'sceneTooDry()' 不是函数”。
  • 不,应该在外层函数里面。

标签: javascript function nested-function


【解决方案1】:

我通过使用@Barmar 提出的建议得到了答案。我没有看到我可以在哪里标记这个回答。

我按照他的建议从外部函数内部调用了内部函数。

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 2018-05-27
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多