所以,如果可能的话,我真正想知道的是如何知道何时执行回调,如何从中触发事件,或者如何在执行回调时使用回调发送值,使用TypeScript在Angular中使用。
我知道回调是如何工作的,并且由于它们的异步性质,这可能无法实现,但是我希望也许有一种尚未解决的变通办法。我有这样的功能:
abcCallback() {
// code
}
在我执行特定操作时执行(此操作与该问题无关,因为我使用的是库且上下文不同)。问题是我无法使用函数内部的变量或可观察变量来发送事件,例如,为了了解函数是否已执行而无法更改变量的值。
我唯一知道回调是否已执行的方法是通过从函数内部打印消息,但是我希望能够从函数外部知道回调是否已执行。
很抱歉,如果我不够清楚,可以随时提出任何其他问题。
答案 0 :(得分:0)
您可以在方法执行的return语句之前添加一些私有标志,例如
abcCallback() {
// code
abcCallback.__executed__ = true;
}
然后,您可以通过检查abcCallback.__executed__
获得执行状态。另外,请记住,每当您要重新开始此过程时,都要重置此标志。
答案 1 :(得分:0)
RxJS是Angular的一部分。
也许您可以在执行回调时使用它来发出BehaviourSubject。
之后,您必须订阅“事件”。
RxJS网站:https://rxjs-dev.firebaseapp.com/
RxJS视觉说明:https://rxmarbles.com/
import {BehaviorSubject} from "rxjs";
// By default callback wasn't executed
const executedCallback$: BehaviorSubject<boolean> = new BehaviorSubject(false);
// Your callback
const myCallback = () => {
// Each time the callback is executed, the boolean true is emit
executedCallback$.next(true);
}
// You listen the event
const subscription = executedCallback$.subscribe(executed => {
// When you subscribe to a Behaviour subject,
// you firstly received the actual value,
// so you can received the value false if your callback wasn't executed
if (executed) {
console.log('My callback was executed');
}
});
// When you want to stop listening, don't forget to unsubscribe ...
subscription.unsubscribe();
答案 2 :(得分:-1)
您可以在回调之外定义变量,并在回调函数的末尾进行更改。该变量的状态将显示回调是否完成。
let isCallbackExecuted = false;
let abcCallback = () => {
// do something
isCallbackExecuted = true;
};
Promise.resolve().then(abcCallback);
// isCallbackExecuted is true if callback is finished
答案 3 :(得分:-1)
我建议您使用静态属性:
export class MyComponent implements OnInit {
static flag = false;
[...]
并在您的回叫中:
abcCallback() {
MyComponent.flag = true;
}
请注意,如果必须在HTML中使用此属性,则必须实现getter