等待 AngularJS 服务完成 运行(chrome 控制台)
Wait for AngularJS Service to finish running (chrome console)
我正在通过 Chrome 控制台操纵一些 angular services/functions。 (我必须专门为我正在处理的任务执行此操作)。
我要做的是等待 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);
};
使用此功能,我正在将产品添加到我的购物车。而this.option.Quantity
应该console.log1
。但实际上 consoles.log 0
.
但是,如果我检查对象本身,它会显示 1
。
所以我认为正在发生的事情是,我正在 console.log 调整我的行李数量,但实际上还没有将行李添加到购物篮中。
比如我加了一个2秒的settimeout
,正确的包值=1就是console.logged.
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 returns 错误 - 它不喜欢函数 this.HasReachedMaximumBaggageAllowance()
并抛出错误 this.HasReachedMaximumBaggageAllowance is not a function
.
任何 tips/ideas 将不胜感激。
我找到了一个解决方案,我正在使用 $watch
,在 this
对象中观看 key/value。这似乎有效:
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();
};
});
};
我正在通过 Chrome 控制台操纵一些 angular services/functions。 (我必须专门为我正在处理的任务执行此操作)。
我要做的是等待 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);
};
使用此功能,我正在将产品添加到我的购物车。而this.option.Quantity
应该console.log1
。但实际上 consoles.log 0
.
但是,如果我检查对象本身,它会显示 1
。
所以我认为正在发生的事情是,我正在 console.log 调整我的行李数量,但实际上还没有将行李添加到购物篮中。
比如我加了一个2秒的settimeout
,正确的包值=1就是console.logged.
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 returns 错误 - 它不喜欢函数 this.HasReachedMaximumBaggageAllowance()
并抛出错误 this.HasReachedMaximumBaggageAllowance is not a function
.
任何 tips/ideas 将不胜感激。
我找到了一个解决方案,我正在使用 $watch
,在 this
对象中观看 key/value。这似乎有效:
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();
};
});
};