Я пытаюсь получить платежи Braintree в приложении Meteor. Я застрял в попытке вернуть результат создания маркера (серверная сторона, через метод Метеор), который будет использоваться на стороне клиента.Meteor Braintree - Создать токен клиента с помощью метода Meteor
Я попытался это:
/server/braintree.js
Meteor.methods({
createClientToken: function() {
var token = gateway.clientToken.generate({
customerId: this.userId
}, function(err, response) {
clientToken = response.clientToken
return clientToken
}
)
console.log(token)
return token
}
})
который возвращает true
.
Я также попытался это:
Meteor.methods({
createClientToken: function() {
var clientToken
gateway.clientToken.generate({
customerId: this.userId
}, function(err, response) {
clientToken = response.clientToken
}
)
console.log(clientToken)
return clientToken
}
})
Который возвращает undefined
.
function(err, response)
вызывается асинхронно, да? Если это так, это будет объяснение проблемы. Кажется, что попытка вернуть значение из асинхронной функции - это немного больная точка в Javascript. Я прочитал несколько ответов SO на нем (например, this one, this one и this one), но никто, кажется, не привел меня в правильном направлении.
Кроме того, я считаю, что мне, возможно, придется использовать метод Метеор wrapAsync
, правильно? Я пробовал это (и нашел this и this релевантные ВОПРОСЫ на него), но все же, похоже, все не так.
Благодарен за любые отзывы.
Update:
Для рабочего подхода к интеграции Брейнтри с Метеор, проверьте example repo (большое спасибо @Nick Томлин для этого)
Я могу подтвердить, что функция обратного вызова (err, response) 'для' gateway.clientToken.generate' называется асинхронно.Однако я не могу ручаться за определенные обходные методы Meteor :( – mrak