Я работал с Meteor и пакетом полосок, чтобы попытаться сделать клиента. Итак, сначала у меня на стороне клиента код, который вызывает метод на сервере, поэтому при нажатии у меня есть в client.js:Получение звонка с метеоритом, чтобы вернуть ответные реакции на полосы.
Meteor.call('usersignup', function (error, result) {
console.log (result);
});
Таким образом, это вызывает метод на server.js:
var Future = Npm.require('fibers/future');
var stripe = StripeAPI('my key'); // secret stripe API key
Meteor.methods({
usersignup: function(cusEmail){
var fut = new Future();
stripe.customers.create(
{ email: cusEmail },
function(err, customer) {
if (err) {
console.log(err);
fut.ret;
}
fut.ret(customer);
}
);
return fut.wait();
},
userfail: function(cusid){
var fut = new Future();
stripe.customers.retrieve(cusid, function(err, result) {
if(err){
console.log(err);
fut.ret;
}
fut.ret(err, result);
});
return fut.wait();
}
});
Теперь это работает и создает клиента, когда я вхожу на панель инструментов stripe.com, но я пытаюсь получить ответ, возвращенный клиенту, по крайней мере, на идентификаторе клиента и распечатать его в консоли. Здесь я не могу заставить его работать. Это будет log undefined, когда я сделаю console.log (результат). Есть идеи?
EDIT: Таким образом, я поместил волокно и полосу в качестве глобальных переменных сейчас и не получаю ошибку, но возвраты, похоже, не возвращают никаких значений. так на стороне клиента, у меня есть:
'click #signupsubmit': function (event) {
console.log("hello");
var whatis = getVal(); // function gets value of forms and returns object
var testid;
var cusid = Meteor.call('usersignup', whatis.email, function (error, result) {
if (error) {
console.log(err.message);
return;
}
console.log(result);
console.log("meteor call");
testid = result;
return (result);
});
console.log("outside call");
console.log(testid);
console.log(cusid);
},
});
Так я уже работает несколько тестов console.log и, кажется, он выполняет meteor.call и продолжает идти вниз линию. Console.log обоих testid и cusid return undefined, но через пару секунд я получаю console.log результата и строку «meteor call» изнутри meteor.call. Есть ли способ подождать завершения вызова метеорита, а затем запустить остальную часть функции клика? поэтому вывод на консоль будет идти, как:
- "привет"
- "Внешний вызов"
- тест идентификатор не определен
- cusid неопределенную
- "метеоритный вызов" "результат"
Это работало замечательно, но когда я пошел, чтобы сделать еще один метод, который, например, будет удалить клиент он бросает Ошибка с («Будущее разрешено более одного раза»). Поэтому прямо сейчас кто-то нажимает кнопку «Отправить», получает всю информацию из формы и создает stripe.customer, а затем создает Meteor.user, но говорит, что Accounts.createUser выдает ошибку. Я запускаю метод удаления клиента полосы. После того, как я вызываю свой метод stripe del, он дает ошибку. – asiammyself
Не могли бы вы опубликовать обновленный код? Мне нужно немного больше, чтобы продолжить, но я считаю, что, возможно, есть несколько возвратов, поэтому вам нужно убедиться, что fut.ret работает только один раз – Akshat
Обновленный код. Сделано будущее глобальным var. Не знаю, будет ли это правильным способом справиться с этим, но работает пока. Функция по-прежнему не ожидает возврата в отредактированном сообщении. – asiammyself