Closed waylon-gmail closed 2 years ago
import { storage } from '@uni/apis';
const setStorage = (key, value): Promise<boolean> => {
return new Promise((resolve) => {
storage.setStorage({
key: `${key}`,
data: value,
}).then((res) => {
resolve(true);
}).catch((err) => {
logger.e(LOG_TAG, 'setStorage', err);
resolve(false);
}).finally(() => {
});
});
};
const setToken = async (token: API.IRestToken): Promise<boolean> => {
if (!token || !token.accessToken) {
return false;
}
try {
const result: boolean = await setStorage(tokenCacheKey, JSON.stringify(token));
return result;
} catch (e) {
logger.e(LOG_TAG, 'setToken', e); // 报错的位置
return false;
}
};
直接改成原生api可以了。用了个if isMiniApp
const setStorage = (key, value): Promise<boolean> => {
return new Promise((resolve) => {
if (isMiniApp) {
my.setStorage({
key: `${key}`,
data: value,
success: (res) => {
resolve(true);
},
fail: (err) => {
logger.e(LOG_TAG, 'setStorage', err);
resolve(false);
},
});
} else {
storage.setStorage({
key: `${key}`,
data: value,
}).then((res) => {
resolve(true);
}).catch((err) => {
logger.e(LOG_TAG, 'setStorage', err);
resolve(false);
}).finally(() => {
});
}
});
};
这个问题是因为支付宝小程序真机环境的Promise没有实现finally方法,跟setStorage api的使用方法没有关系,猜测是支付宝小程序真机Promise实例与模拟器实现不一致,建议可以使用complete回调解决
微信小程序模拟器没问题; 微信小程序真机没问题; 支付宝小程序模拟器没问题; 支付宝小程序真机报如上错误。