From 4e04da0ccfd938e58d4f0239be861a882fb01d56 Mon Sep 17 00:00:00 2001 From: enncy <877526278@qq.com> Date: Mon, 23 May 2022 22:09:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(core):=20=E4=BF=AE=E5=A4=8D=E9=A2=98?= =?UTF-8?q?=E5=BA=93=E9=85=8D=E7=BD=AE=E6=8A=A5=E9=94=99=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=9C=AA=E6=8D=95=E8=8E=B7=E7=9A=84BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/core/utils/common.ts | 84 ++++++++++++++------------ 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/packages/core/src/core/utils/common.ts b/packages/core/src/core/utils/common.ts index e679822d..2b439d1d 100644 --- a/packages/core/src/core/utils/common.ts +++ b/packages/core/src/core/utils/common.ts @@ -120,49 +120,57 @@ export function request(url: string, opts: { data?: Record; }): Promise { return new Promise((resolve, reject) => { - /** 默认参数 */ - const { contentType = 'json', method = 'get', type = 'fetch', data = {}, headers = {} } = opts || {}; - /** 环境变量 */ - const env = isInBrowser() ? 'browser' : 'node'; + try { + /** 默认参数 */ + const { contentType = 'json', method = 'get', type = 'fetch', data = {}, headers = {} } = opts || {}; + /** 环境变量 */ + const env = isInBrowser() ? 'browser' : 'node'; - /** 如果是跨域模式并且是浏览器环境 */ - if (type === 'GM_xmlhttpRequest' && env === 'browser') { - if (typeof GM_xmlhttpRequest !== 'undefined') { - // eslint-disable-next-line no-undef - GM_xmlhttpRequest({ - url, - method: method === 'get' ? 'GET' : 'POST', - data: new URLSearchParams(data).toString(), - headers: headers, - responseType: 'json', - onload: (response) => { - if (response.status === 200) { - if (contentType === 'json') { - resolve(JSON.parse(response.responseText)); + /** 如果是跨域模式并且是浏览器环境 */ + if (type === 'GM_xmlhttpRequest' && env === 'browser') { + if (typeof GM_xmlhttpRequest !== 'undefined') { + // eslint-disable-next-line no-undef + GM_xmlhttpRequest({ + url, + method: method === 'get' ? 'GET' : 'POST', + data: new URLSearchParams(data).toString(), + headers: headers, + responseType: 'json', + onload: (response) => { + if (response.status === 200) { + if (contentType === 'json') { + try { + resolve(JSON.parse(response.responseText)); + } catch (error) { + reject(error); + } + } else { + resolve(response.responseText); + } } else { - resolve(response.responseText); + reject(response.responseText); } - } else { - reject(response.responseText); - } - }, - onerror: reject - }); - } else { - reject(new Error('GM_xmlhttpRequest is not defined')); - } - } else { - const fet: (...args: any[]) => Promise = env === 'node' ? require('node-fetch').default : fetch; - - fet(url, { contentType, body: method === 'post' ? data : undefined, method, headers }).then(async (response) => { - if (contentType === 'json') { - resolve(await response.json()); + }, + onerror: reject + }); } else { - resolve(await response.text()); + reject(new Error('GM_xmlhttpRequest is not defined')); } - }).catch((error) => { - reject(new Error(error)); - }); + } else { + const fet: (...args: any[]) => Promise = env === 'node' ? require('node-fetch').default : fetch; + + fet(url, { contentType, body: method === 'post' ? data : undefined, method, headers }).then((response) => { + if (contentType === 'json') { + response.json().then(resolve).catch(reject); + } else { + response.text().then(resolve).catch(reject); + } + }).catch((error) => { + reject(new Error(error)); + }); + } + } catch (error) { + reject(error); } }); }