仅在异步调用完成后,如何使函数返回200?

时间:2019-03-19 01:16:35

标签: node.js request google-cloud-functions

我使用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();
});

1 个答案:

答案 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');
            }
        });
    }
});