Как заставить мою функцию возвращать 200 только после завершения асинхронного вызова? - PullRequest
0 голосов
/ 19 марта 2019

Я разработал CloudFunction с использованием FireBase, который при вызове вызывает внешний API, я хочу, чтобы моя функция возвращала 200, только если вызов выполнен успешно, я читал об обещаниях, однако не смог выяснить, как сделать это при использовании библиотеки запросов.

Как я могу возвратить 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 Ответ

2 голосов
/ 19 марта 2019

Код для отправки ответа можно запустить только после получения результата от стороннего 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');
            }
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...