Pracowałem z Meteorem i pakietem pasków, aby spróbować zrobić klienta. Więc po pierwsze mam kodu po stronie klienta, który wywołuje metodę na serwerze, tak po kliknięciu mam w client.js:Wywołanie meteorów w celu zwrócenia odpowiedzi na pasek rozłożenia
Meteor.call('usersignup', function (error, result) {
console.log (result);
});
więc ten wywołuje metodę na 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();
}
});
Teraz to działa i tworzy klienta, kiedy loguję się na desce rozdzielczej stripe.com, ale próbuję uzyskać odpowiedź zwróconą klientowi, przynajmniej na razie, na identyfikator klienta i wydrukować go w konsoli. Tutaj nie mogę sprawić, żeby działało. Będzie logował się niezdefiniowany, gdy wykonam console.log (wynik). Jakieś pomysły?
EDYCJA: Teraz wstawiam klucz światłowodowy i pasek jako zmienne globalne i nie otrzymuję błędu, ale zwroty nie wydają się zwracać żadnych wartości. więc po stronie klienta mam:
'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);
},
});
więc już zostały uruchomione kilka testów console.log i wydaje się, że wykonuje meteor.call i leci w dół. Console.log zarówno zwrotów testid, jak i cusid są niezdefiniowane, ale kilka sekund później otrzymuję konsolę.log z wynikiem i ciąg "meteor call" z wnętrza meteor.call. Czy istnieje sposób oczekiwania na zakończenie połączenia meteorów, a następnie uruchomienie reszty funkcji mojego kliknięcia? więc wyjście konsola trafi jak:
- "cześć"
- "poza wezwanie"
- Test id niezdefiniowany
- cusid niezdefiniowanej
- "Call meteor"
- "Wynik"
To działało świetnie, ale kiedy poszedłem do innej metody, które na przykład by usunąć klient zgłasza Błąd z ("Przyszłość rozwiązano więcej niż jeden raz"). Więc teraz ktoś kliknie przesłać pobiera wszystkie informacje z formularza i tworzy stripe.customer następnie utworzyć Meteor.user, ale powiedz, że Accounts.createUser zgłasza błąd Uruchomę metodę, aby usunąć klienta pasków. Po wywołaniu mojej metody stripe del daje błąd. – asiammyself
Czy mógłbyś opublikować zaktualizowany kod? Potrzebuję trochę więcej, ale wydaje mi się, że zapewne istnieje wiele zwrotów, więc musisz upewnić się, że fut.ret działa tylko raz. Zaktualizowany kod: – Akshat
. Made Future a global var. Nie wiem, czy byłby to właściwy sposób postępowania, ale działa na razie. Funkcja nadal wydaje się nie czekać na powrót patrz edytowany post. – asiammyself