Код для отправки ответа можно запустить только после получения результата от стороннего 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');
}
});
}
});
В основном это - поврежденный интерфейс. Ken Arnold и Bill Venners обсудили это в Вопросах проектирования Java.
Arnold:
Если бы я должен был быть Богом в этой точке, и многие люди, вероятно, рады, что я не, то я сказал бы, удерживают от использования
Cloneable
и имейте aCopyable
, потому чтоCloneable
имеет проблемы. Помимо того, что это пишется c орфографическими ошибками,Cloneable
не содержитclone
метод. Это означает, что Вы не можете протестировать, если что-то - экземплярCloneable
, бросьте его кCloneable
, и вызовитеclone
. Необходимо использовать отражение снова, которое ужасно. Это - только одна проблема, но один я, конечно, решил бы.
Посмотрите эту ошибку в базе данных ошибок Java:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4098033
По существу это - недостаток дизайна в более ранних версиях Java, который они не намереваются зафиксировать в интерфейсе Cloneable, чтобы сделать, так повредил бы совместимость с некоторым существующим кодом.
В Java существует это понятие интерфейсов маркера. Cloneable
интерфейс не имеет никаких методов или полей и служит только для идентификации семантики того, чтобы быть cloneable.
с dev-x веб-сайта:
Часто Вы будете сталкиваться с интерфейсами в Java, которые не имеют никакого поведения. Другими словами, они - просто пустые интерфейсные определения. Они известны как интерфейсы маркера. Некоторые примеры интерфейсов маркера в Java API включают:
На проекте я продолжаю работать, мы создали интерфейс под названием PublicCloneable, он содержит метод клона и указывает, что это общедоступно.
Я нахожу этого полезным: то, что существует метод клона, но Вы не можете получить доступ, это не помогает очень.
public interface PublicCloneable extends Cloneable {
public Object clone();
}
Поскольку метод клона реализован в Классе объекта из-за его "специального" условия: копия памяти объектов любого вида.