diff --git a/lib/util/memoize.spec.ts b/lib/util/memoize.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..743d33295aa098dcb2adcea35382e3e709c8f15f
--- /dev/null
+++ b/lib/util/memoize.spec.ts
@@ -0,0 +1,17 @@
+import { memoize } from './memoize';
+
+describe('util/memoize', () => {
+  let calledTimes = 0;
+
+  it('works', () => {
+    const fn = (): number => {
+      calledTimes += 1;
+      return calledTimes;
+    };
+    const memFn = memoize(fn);
+
+    expect(memFn()).toBe(1);
+    expect(memFn()).toBe(1);
+    expect(calledTimes).toBe(1);
+  });
+});
diff --git a/lib/util/memoize.ts b/lib/util/memoize.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ae3be629d338582a5b549c6282908ed12bc0d40c
--- /dev/null
+++ b/lib/util/memoize.ts
@@ -0,0 +1,17 @@
+interface Result<T = unknown> {
+  res: T;
+}
+
+export function memoize<T = unknown>(callback: () => T): () => T {
+  let memo: null | Result<T> = null;
+
+  return (): T => {
+    if (memo) {
+      return memo.res;
+    }
+
+    const res = callback();
+    memo = { res };
+    return res;
+  };
+}
diff --git a/lib/workers/repository/update/pr/index.ts b/lib/workers/repository/update/pr/index.ts
index 55ef9ded48c705db0e784fe6d56ec3146c86f5b6..2b8b01b932850e26469147db04bcf05319e725c3 100644
--- a/lib/workers/repository/update/pr/index.ts
+++ b/lib/workers/repository/update/pr/index.ts
@@ -12,6 +12,7 @@ import { BranchStatus } from '../../../../types';
 import { ExternalHostError } from '../../../../types/errors/external-host-error';
 import { stripEmojis } from '../../../../util/emoji';
 import { deleteBranch, getBranchLastCommitTime } from '../../../../util/git';
+import { memoize } from '../../../../util/memoize';
 import { regEx } from '../../../../util/regex';
 import { Limit, incLimitedValue, isLimitReached } from '../../../global/limits';
 import type {
@@ -63,15 +64,9 @@ export type EnsurePrResult = ResultWithPr | ResultWithoutPr;
 export async function ensurePr(
   prConfig: BranchConfig
 ): Promise<EnsurePrResult> {
-  let branchStatus: BranchStatus;
-  async function getBranchStatus(): Promise<BranchStatus> {
-    if (branchStatus) {
-      return branchStatus;
-    }
-    branchStatus = await resolveBranchStatus(branchName, ignoreTests);
-    logger.debug(`Branch status is: ${branchStatus}`);
-    return branchStatus;
-  }
+  const getBranchStatus = memoize(() =>
+    resolveBranchStatus(branchName, ignoreTests)
+  );
 
   const config: BranchConfig = { ...prConfig };