diff --git a/miniprogram/apis/douban.js b/miniprogram/apis/douban.js index e382624..7e5779c 100644 --- a/miniprogram/apis/douban.js +++ b/miniprogram/apis/douban.js @@ -4,6 +4,11 @@ import { request as baseRequest } from '../utils/request'; import { store } from '../store/index'; +/** + * @type {{ params: RequestOption, resolve: (data: any) => void, reject: (err: any) => void }[]} + */ +const queue = []; + export let isLoginIng = false; /** * @param {boolean} value @@ -26,27 +31,38 @@ const request = (params) => { ...params, }; - return baseRequest({ - header: { - ...(!notAuthorization && accessToken && { Authorization: `Bearer ${accessToken}` }), - ...header, - }, - ...rest, - }) - .then((resp) => { - if (resp.ok) { - return resp.data; - } else if (resp.statusCode === 400 && [103, 106].includes(resp.data.code)) { - if (!isLoginIng) { - isLoginIng = true; - wx.navigateTo({ - url: '/packages/douban/pages/login-phone/login-phone' - }); + return new Promise((resolve, reject) => { + baseRequest({ + header: { + ...(!notAuthorization && accessToken && { Authorization: `Bearer ${accessToken}` }), + ...header, + }, + ...rest, + }) + .then((resp) => { + if (resp.ok) { + resolve(resp.data); + } else if (resp.statusCode === 400 && [103, 106].includes(resp.data.code)) { + queue.push({ params, resolve, reject }); + if (!isLoginIng) { + isLoginIng = true; + wx.navigateTo({ + url: '/packages/douban/pages/login-phone/login-phone' + }); + } + } else { + reject(resp.data); } - } else { - return Promise.reject(resp.data); - } - }); + }); + }); +}; + +/** 登录成功后重放登录失效接口 */ +export const replayRequest = () => { + while (queue.length) { + const { params, resolve, reject } = queue.shift(); + request(params).then(resolve, reject); + } }; /** @@ -165,7 +181,7 @@ export const getHotMovies = (params) => { /** * 榜单合集 - * @param {object} params + * @param {object} params * @param {string} params.type * @param {number} [params.start] * @param {number} [params.count] @@ -181,7 +197,7 @@ export const getCollectionList = (params) => { /** * 影院热映 - * @param {object} params + * @param {object} params * @param {number} [params.start] * @param {number} [params.count] * @returns {Promise} diff --git a/miniprogram/packages/douban/pages/login-phone/login-phone.js b/miniprogram/packages/douban/pages/login-phone/login-phone.js index 430c35a..ae9baaf 100644 --- a/miniprogram/packages/douban/pages/login-phone/login-phone.js +++ b/miniprogram/packages/douban/pages/login-phone/login-phone.js @@ -1,6 +1,6 @@ import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'; import { store } from '../../../../store/index'; -import { setLoginIng } from '../../../../apis/douban'; +import { replayRequest, setLoginIng } from '../../../../apis/douban'; import { getCaptcha, verifyCaptcha } from '../../../../apis/douban/accounts'; import { apiSyncDouban } from '../../../../apis/vercel'; import { emitter, events } from '../../../../utils/events'; @@ -22,10 +22,6 @@ Page({ }, }, - onLoad() { - console.log('=== 登录', store) - }, - onUnload() { setLoginIng(false); }, @@ -97,6 +93,7 @@ Page({ refreshToken: refresh_token, user: account_info, }); + replayRequest() emitter.emit(events.LOGIN_SUCCESS); wx.showToast({ icon: 'none',