我想重写此函数来解决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而不是使用回调函数?
答案 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);
});
};