【发布时间】:2018-12-29 19:08:50
【问题描述】:
我在从链式 Promise 中获取响应时遇到了一些问题。
我有我的组件链开始的地方
组件
componentDidMount = async ()=> {
try{
const products = await post('payments/getProducts', {});
console.log(products);
} catch(e) {
console.log(e)
}
}
这个组件调用我的 API 助手:
async function post(url, data) {
token = null;
if (firebase.auth().currentUser) {
token = await firebase.auth().currentUser.getIdToken();
}
try {
const response = axios({
method: 'POST',
headers: {
Authorization: `${token}`,
},
data,
url: `${API_URL}${url}`,
})
return response;
} catch(e){
Promise.reject(e);
}
}
然后我的 API Helper 调用一个调用 Stripe 的 Firebase Cloud Function:
paymentRouter.post('/getProducts', (req, res) => {
return stripe.products.list()
.then(products => {
console.log(products.data)
return products.data;
})
.catch(e => {
throw new functions.https.HttpsError('unknown', err.message, e);
})
})
调用函数没问题,我的Cloud Function注销了产品数据,但是我的API Helper和我的组件都无法得到响应。
【问题讨论】:
-
第一件事我看到你没有在你的助手中使用
awaitaxios。 -
谢谢,错过了。添加了它,但还没有快乐
-
post是一个错误。这是async,但你没有做任何它可以帮助的事情。不应该有 try..catch - 你稍后会发现错误。此外,您不会返回Promise.reject(e)。这样你就可以抑制错误。只需从该函数中删除async并返回axios(...)。
标签: javascript reactjs promise google-cloud-functions