From 263009676055869357cb9ce2143809c87fca0bd0 Mon Sep 17 00:00:00 2001 From: "sunny.luo" Date: Fri, 13 Dec 2024 18:46:09 +0800 Subject: [PATCH] v8.5.3 --- lib/utils.ts | 39 +++++++++++++++++++++++++++++++++------ package.json | 2 +- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/lib/utils.ts b/lib/utils.ts index b17c890..e48c20f 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -4,7 +4,7 @@ export function promiseAny(promises: Promise[]) { return new Promise((resolve, reject) => { let count = 0; - promises.forEach(promise => { + promises.forEach((promise) => { Promise.resolve(promise) .then(resolve) .catch(() => { @@ -30,17 +30,44 @@ export function assertRelease() { const ping = Platform.OS === 'web' ? Promise.resolve - : async (url: string) => - Promise.race([ + : async (url: string) => { + let pingFinished = false; + return Promise.race([ fetch(url, { method: 'HEAD', - }).then(({ status }) => (status === 200 ? url : null)), - new Promise(r => setTimeout(() => r(null), 2000)), + }) + .then(({ status, statusText }) => { + pingFinished = true; + if (status === 200) { + return url; + } + logger('ping failed', url, status, statusText); + return null; + }) + .catch((e) => { + pingFinished = true; + logger('ping error', url, e); + return null; + }), + new Promise((r) => + setTimeout(() => { + r(null); + if (!pingFinished) { + logger('ping timeout', url); + } + }, 2000), + ), ]); + }; export const testUrls = async (urls?: string[]) => { if (!urls?.length) { return null; } - return promiseAny(urls.map(ping)).catch(() => null); + const ret = await promiseAny(urls.map(ping)); + if (ret) { + return ret; + } + logger('all ping failed, use first url:', urls[0]); + return urls[0]; }; diff --git a/package.json b/package.json index da0119b..4c847d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-update", - "version": "8.5.2", + "version": "8.5.3", "description": "react-native hot update", "main": "lib/index.ts", "scripts": {