javascript - 使用 Axios 在两个地方敲出错误消息
问题描述
我们在 api.js 文件中包含所有 api 调用,如下所示:
import { axiosClient as axios } from 'Utils';
export const urls = {
getReceiptData: '/purchase/getReceiptData',
processPurchase: '/purchase/process-purchase',
};
export const getReceiptData = () => axios.get(urls.getReceiptData)
.then(({ data }) => data);
export const purchaseStatus = purchaseId => axios.get(urls.purchaseStatus.replace('$1', purchaseId))
.then(({ data }) => data);
但是,我们希望开始将所有错误消息记录到 New Relic,同时当然不会破坏功能。
我最初的反应是在这个文件中收到错误消息并在此处处理它,如下所示:
export const purchaseStatus = purchaseId => axios.get(urls.purchaseStatus.replace('$1', purchaseId))
.then(({ data }) => data, error => newrelic.noticeError(error););
但是从循环调用 api.js 文件时,我无法获得相同的功能:
pollPurchase = purchaseId => new Promise(resolve => setTimeout(resolve, 1000))
.then(() => api.purchaseStatus(purchaseId))
.then((response) => {
if (response.state === 'COMPLETED') {
return true;
}
return this.pollPurchase(purchaseId);
});
它似乎打破了循环。有人对如何做到这一点有建议吗?
解决方案
Axios 使用承诺模式而不是回调模式,因此尝试使用这个
export const purchaseStatus = purchaseId =>
axios.get(urls.purchaseStatus.replace('$1', purchaseId))
.then(({ data }) => data)
.catch(error => {
newrelic.noticeError(error);
return Promise.reject(error);
});
它应该像在您的解决方案中尝试传递 .then 2 个回调一样工作,但它只接受第一个回调并忽略第二个回调。
并将 pollPurchase 方法更新为
pollPurchase = purchaseId => new Promise(resolve => setTimeout(resolve, 1000))
.then(() => api.purchaseStatus(purchaseId))
.then((response) => {
if (response.state === 'COMPLETED') {
return true;
}
return this.pollPurchase(purchaseId);
}).catch(console.error)
推荐阅读
- ksqldb - 运行某些查询时重新启动 KSQL-Server
- angular - 在更新和验证子组件后运行 ControlValueAccessor validate
- clickhouse - ClickHouse ,选择 top n 并按主键排序的问题
- c - 浅层和深层析构函数?
- android - 固定 TabLayout 中每页的选项卡数
- go - 如何测试忽略golang中的一些测试文件?
- react-native - TabNavigator 子屏幕如何引用父 StackNavigator?
- apache-karaf - 无法使用 undertow 服务器保护 7.3 fuse 控制台
- google-api - 无法为 Google Docs API 设置适当的范围
- minify - 有人可以指导我如何在我的反应应用程序(firebase)中使用 imagemin-webp 吗?