承诺setTimeout

时间:2019-10-09 18:40:31

标签: typescript promise callback 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而不是使用回调函数?

1 个答案:

答案 0 :(得分:1)

根据评论,我能够重构该函数以正确返回一个仅在建立连接时才能解决的promise:

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);
        });
};