我怎么知道何时执行回调

时间:2019-01-17 17:12:05

标签: angular typescript asynchronous callback

所以,如果可能的话,我真正想知道的是如何知道何时执行回调,如何从中触发事件,或者如何在执行回调时使用回调发送值,使用TypeScript在Angular中使用。

我知道回调是如何工作的,并且由于它们的异步性质,这可能无法实现,但是我希望也许有一种尚未解决的变通办法。我有这样的功能:

abcCallback() {
  // code
}

在我执行特定操作时执行(此操作与该问题无关,因为我使用的是库且上下文不同)。问题是我无法使用函数内部的变量或可观察变量来发送事件,例如,为了了解函数是否已执行而无法更改变量的值。

我唯一知道回调是否已执行的方法是通过从函数内部打印消息,但是我希望能够从函数外部知道回调是否已执行。

很抱歉,如果我不够清楚,可以随时提出任何其他问题。

4 个答案:

答案 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