同步小程序与管理端更新,完善抽烟记录和解绑冷静期
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
const { api } = require('./request');
|
||||
let pending = null;
|
||||
let cached = null;
|
||||
let cachedAt = 0;
|
||||
let user = null;
|
||||
function address(value) {
|
||||
const text = String(value || '').trim();
|
||||
return /^-?\d+(\.\d+)?,\s*-?\d+(\.\d+)?$/.test(text) ? '' : text;
|
||||
}
|
||||
async function currentUserLocation() {
|
||||
const uid = wx.getStorageSync('userId');
|
||||
if (user !== uid) { user = uid; pending = null; cached = null; cachedAt = 0; }
|
||||
if (cached && Date.now() - cachedAt < 45000) return { ...cached };
|
||||
if (pending) return pending;
|
||||
const task = (async () => {
|
||||
let coords = { lat: 0, lng: 0 };
|
||||
try {
|
||||
if (wx.getFuzzyLocation) coords = await new Promise(resolve => wx.getFuzzyLocation({ type: 'gcj02', success: res => resolve({lat: res.latitude, lng: res.longitude}), fail: () => resolve(coords) }));
|
||||
const result = await api.updateIpLocation(coords);
|
||||
if (address(result && result.location)) return { ...coords, location: address(result.location) };
|
||||
} catch (error) {}
|
||||
try {
|
||||
const info = await api.coupleInfo();
|
||||
const me = [info.partner1, info.partner2].find(partner => partner && String(partner.id) === String(uid));
|
||||
return { ...coords, location: address(me && me.location) };
|
||||
} catch (error) { return { ...coords, location: '' }; }
|
||||
})();
|
||||
pending = task;
|
||||
try {
|
||||
const result = await task;
|
||||
if (user === uid && pending === task && result.location) { cached = result; cachedAt = Date.now(); }
|
||||
return result;
|
||||
} finally { if (pending === task) pending = null; }
|
||||
}
|
||||
module.exports = { currentUserLocation };
|
||||
Reference in New Issue
Block a user