承诺 setTimeout

Promise with setTimeout

我想重写此函数来解析 promise 而不是调用回调函数,以试图更好地理解如何使用 promise。

export const connect = (callback: CallableFunction|void): void => {
    LOG.debug("Connecting to DB at %s", URI);

    connectToMongoDb(URI, opts)
        .then((result) => {
            LOG.debug("Connection established");
            connection = result;

            if (callback) {
                callback();
            }
        })
        .catch((err) => {
            LOG.error("Could not establish connection to %s, retrying...", URI);
            LOG.error(err);
            setTimeout(() => connect(callback), 5000);
        });
};

不过,我好像做不到。我已经尝试过天真的方法

export const connect = (): Promise<void> => new Promise((resolve): void => {
    // ...´
        .then((result) => {
            LOG.debug("Connection established");
            connection = result;
            resolve();
        })
    // ...
});

但是当建立连接时,这并没有正确解决。

我做错了什么?我如何重写它以正确使用和解析 Promise 而不是使用回调函数?

根据评论,我能够重构该函数以正确地 return 仅在建立连接时才解析的承诺:

const delay = (ms: number): Promise<void> =>
    new Promise((resolve): void => {
        setTimeout(resolve, ms);
    });

export const connect = (): Promise<void> => {
    LOG.info("Connecting to DB at %s", URI);

    return connectToMongoDb(URI, opts)
        .then((result) => {
            LOG.info("Connection to DB established");
            connection = result;
        })
        .catch((err) => {
            LOG.error("Could not establish connection to %s, retrying...", URI);
            LOG.error(err);
            return delay(5000).then(connect);
        });
};