簡體   English   中英

如何查看我的 object 是否循環更新?

[英]How can I see if my object updates in a loop?

我希望此代碼檢查“狀態”object 中的一個鍵是否從 false 更新為 true,如果是,則在 if 語句中運行代碼。 出於某種原因,即使我手動更新狀態變量(就像我在這里所做的那樣)。 代碼永遠不會運行。

我正在使用“compareMe”變量來保存“狀態”object 的最新版本,方法是在循環結束時將其設置為等於“狀態”object。

我敢肯定這不是最好的方法,任何想法都會有很大幫助。

function sleep(ms) {
    return new Promise((resolve) => {
        setTimeout(resolve, ms * 1000)
    })
}

var states = { Dad: false, Mom: false, Brother: false, Sister: true }
var compareMe = {}
var loop = 0;

(async () => {
    while(true) {
        loop++
        if (loop === 5) {
            states.Dad = true
        }
        for (const key of Object.keys(states)) {
            if(compareMe[key] === false && states[key] === true) {
                console.log("Opening Door")
            } else {
                console.log('No change')
            }   
        }
        compareMe = states;
        await sleep(5)
    }
})();

你用compareMe = states做的是在同一個 object 上創建一個新的引用,所以每當你改變states時,改變都會反映在compareMe上。

您應該改為執行克隆:

compareMe = { ...states };

您可以使用代理 object 來監視您的 object 的變化。

包含更多詳細信息的原始答案

 var targetObj = {}; var targetProxy = new Proxy(targetObj, { set: function (target, key, value) { // function called console.log(`${key} set to ${value}`); target[key] = value; return true; } }); targetProxy.newProp = "test"; // console: 'newProp set to test'

但是,僅使用庫來監視和觀察變量對您來說會更容易。 有很多庫和框架可以做到這一點。 庫: Obseravble-Slim框架:Angular

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM