等待 AngularJS 服务完成运行(chrome 控制台)

Wait for AngularJS Service to finish running (chrome console)

提问人:Reena Verma 提问时间:11/2/2021 最后编辑:Shalom PelesReena Verma 更新时间:11/9/2021 访问量:68

问:

我正在通过 Chrome 控制台操作一些角度服务/功能。(我必须专门为我正在处理的任务执行此操作)。

我想做的是等待函数执行并完成运行。然后才能访问变量 .AddBagIfLimitNotReached()this.option.Quantity

angular.element(document.querySelector(".quantity-button")).controller()._registeredControls[1].Scope.AddBagIfLimitNotReached = async function(n) {
    console.log("tthis", this)
        if (this.HasReachedMaximumBaggageAllowance()) {
            angular.element(document.querySelector(".quantity-button")).controller()._registeredControls[1].LuggageDrawersService.OpenLuggageLimitReachedDrawer();
            return;
        }
        this.AddBag(n);
        console.log("Quantity", this.option.Quantity);
};

使用此功能,我将产品添加到我的购物车中。并且应该控制台.log .但它实际上是控制台.log 。this.option.Quantity10

但是,如果我检查对象本身,它会显示 .1

所以我认为正在发生的事情是,在袋子实际完成添加到篮子之前,我正在控制台记录我的袋子数量。

例如,如果我添加了 2 秒,则正确的 bag 值 = 1 是 console.logged。settimeout

angular.element(document.querySelector(".quantity-button")).controller()._registeredControls[1].Scope.AddBagIfLimitNotReached = async function(n) {
    console.log("tthis", this)
        if (this.HasReachedMaximumBaggageAllowance()) {
            angular.element(document.querySelector(".quantity-button")).controller()._registeredControls[1].LuggageDrawersService.OpenLuggageLimitReachedDrawer();
            return;
        }
        this.AddBag(n);

        // Returns 1
        setTimeout(function(){ console.log("Quantity", this.option.Quantity); }, 2000);
};

有没有更好的方法可以在不使用 settimeout 的情况下实现这一点?我已经尝试过 async/await/promises,但我似乎仍然找不到等待函数完成加载的方法。

Async/await 返回一个错误 - 它不喜欢该函数并抛出一个错误,指出 .this.HasReachedMaximumBaggageAllowance()this.HasReachedMaximumBaggageAllowance is not a function

任何提示/想法将不胜感激。

angularjs 异步 async-await 承诺

评论

1赞 ikhvjs 11/4/2021
我认为你需要向我们展示和功能。否则,很难判断你是否在做正确的事情。HasReachedMaximumBaggageAllowanceAddBag
0赞 ikhvjs 11/4/2021
另外,绑定到什么??thisScope
0赞 Reena Verma 11/9/2021
是的,它被绑定到 Scope,它基本上是一个对象,其中包含有关正在添加的包的数据。例如。this.option.quanity = 1。这个袋子重量=50kg。等等等等 - HasReachedMaximumBaggageAllowance() 检查行李限制是否为。addBag,将 bag 对象 POST 到服务器。问题是,代码太多了,无法共享。从字面上看,仅这两个功能就有数百行。

答:

0赞 Reena Verma 11/9/2021 #1

我找到了一个解决方案,我正在使用 ,在对象中监视键/值。这似乎有效:$watchthis

angular.element(document.querySelector(".quantity-button.plus-button")).controller()._registeredControls[1].Scope.AddBagIfLimitNotReached = function(n) {
    let bagCount = this.option.Quantity;
    console.log("bagCount", bagCount);

        if (this.HasReachedMaximumBaggageAllowance()) {
            angular.element(document.querySelector(".quantity-button.plus-button")).controller()._registeredControls[1].LuggageDrawersService.OpenLuggageLimitReachedDrawer();
            return;
        };

        this.AddBag(n);
        this.$watch("this.option.Quantity", function (newValue) {
            console.log(`Value of foo changed ${newValue}`);
            if (newValue > 0) {
                document.querySelector(`.luggage-tile-weight-${n.Weight} .tile-title .tick-box`).classList.add("green-tick");
                displayGreenTickNoBagSelected();
            };
            if (newValue === 0) {
                document.querySelector(`.luggage-tile-weight-${n.Weight} .tile-title .tick-box`).classList.remove("green-tick");
                displayGreenTickNoBagSelected();
            };
        });
};