Вы должны использовать обещания в своей облачной функции для обработки асинхронных задач.По умолчанию request
не возвращает обещания, поэтому вам необходимо использовать интерфейсную оболочку для запроса, например request-promise
, которая «возвращает обычное обещание / совместимое обещание +» следующим образом:
....
const rp = require('request-promise');
exports.shipmentlabelwithreturnid = functions.https.onRequest((req, res) => {
var rateid = req.body.RateId;
console.log(rateid);
var options = { method: 'POST',
uri: 'https://api.shipengine.com/v1/labels/rates/'+ rateid,
headers:
{ 'content-type': 'application/json',
accept: 'application/json'
}
};
rp(options)
.then(response => {
console.log('Get response: ' + response.statusCode);
res.send('Success');
})
.catch(err => {
// API call failed...
res.status(500).send('Error': err);
});
});
Также важно отметить, что вы должны быть в тарифном плане «Пламя» или «Пламя».
На самом деле, бесплатный план «Искра» допускает исходящиесетевые запросы только к сервисам, принадлежащим Google ».См. https://firebase.google.com/pricing/ (наведите курсор мыши на знак вопроса, расположенный после заголовка «Облачные функции»)
Так как https://api.shipengine.com не принадлежит Google, вам необходимо переключиться наплан "Пламя" или "Пламя".
В связи с тем, что вы должны использовать обещания для выполнения асинхронных задач, я предлагаю вам посмотреть эти видео от команды Firebase: https://www.youtube.com/watch?v=7IkUgCLr5oA&t=28s и https://www.youtube.com/watch?v=652XeeKNHSk, которые объясняютэто ключевое понятие.