我使用FireBase开发了CloudFunction,该函数在被调用时调用外部API,我希望函数仅在调用成功的情况下才返回200,我一直在阅读关于promises的信息,但是我一直无法找出如何在使用请求库时执行此操作。
仅当异步调用成功完成后,如何才能将200返回给调用者?
这是我当前的代码:
exports.payment = functions.https.onRequest((req, res) => {
var db = admin.firestore();
if(req.body.action === 'payment.created') {
const paymentId = req.body.data.id;
// Get Payment Information from MercadoPago
request('https://api.mercadopago.com/v1/payments/' + paymentId + '?access_token=' + MP_ACCESS_TOKEN, function (error, response, body) {
if (!error && response.statusCode === 200) {
// Return 200 here
}
});
}
res.send();
});
答案 0 :(得分:2)
只有从第三方API获得结果后,才能运行发送响应的代码。因此,res.send()
应该在内部 request
回调中:
exports.payment = functions.https.onRequest((req, res) => {
var db = admin.firestore();
if(req.body.action === 'payment.created') {
const paymentId = req.body.data.id;
// Get Payment Information from MercadoPago
request('https://api.mercadopago.com/v1/payments/' + paymentId + '?access_token=' + MP_ACCESS_TOKEN, function (error, response, body) {
if (!error && response.statusCode === 200) {
res.status(200).send('ok');
}
});
}
});