带有回调函数的Typescript计时器,我可以等待

带有回调函数的Typescript计时器,我可以等待,typescript,asynchronous,Typescript,Asynchronous,我对打字脚本比较陌生。 我正在尝试创建一个计时器(或使用一个随时可用的计时器,如果您知道的话),它允许我在每个间隔执行多次操作(例如:在数组中的每个元素上执行淡入淡出等UI操作),并给我一个可以等待的结束标志。 到目前为止,我得到了: function delay(delay: number) { return new Promise(r => { setTimeout(r, delay); }) } type timerCallback = (args:

我对打字脚本比较陌生。
我正在尝试创建一个计时器(或使用一个随时可用的计时器,如果您知道的话),它允许我在每个间隔执行多次操作(例如:在数组中的每个元素上执行淡入淡出等UI操作),并给我一个可以等待的结束标志。
到目前为止,我得到了:

function delay(delay: number) {
    return new Promise(r => {
        setTimeout(r, delay);
    })
}

type timerCallback = (args: any, counter: number) => void;

class Timer {
    private _callback: timerCallback;

    constructor(callback: timerCallback) {
        this._callback = callback;
    }

    async doTimer(args: any, counter: number = 3, delayMs: number = 1000) {
        for (let i = 0; i < counter; i++) {
            await delay(delayMs);
            counter = counter - 1;
            this._callback(args, i);
            //console.log(this.counter);
        }
    }
}
但我需要等待计时器上的所有迭代都结束…

你知道我该如何实现这一点吗?

等待showTimer.doTimer的承诺,无论是rusing
等待
(在
异步
函数中)还是它的
然后
捕获
方法(在非
异步
函数中)

您的
myMethod
是一个非
async
函数,因此:

showTimer.doTimer(/*...*/)
.then(() => {
    // It's done now
})
.catch(() => {
    // An error occurred
});

您的
doTimer
承诺将永远不会被拒绝,因此从技术上讲,您可以放弃
catch
处理程序。但很多时候,你看到人们在承诺可能被拒绝的情况下放弃承诺,以至于我不敢给出一个不遵守承诺规则的例子:你应该归还承诺链或处理拒绝

showTimer.doTimer(/*...*/)
.then(() => {
    // It's done now
})
.catch(() => {
    // An error occurred
});