gpt4 book ai didi

javascript - Meteor.WrapAsync 不返回值

转载 作者:行者123 更新时间:2023-11-29 18:12:14 35 4
gpt4 key购买 nike

我一直在努力工作 Meteor.WrapAsync 我已阅读 Meteor wrapAsync syntax回答,这个视频https://www.eventedmind.com/feed/meteor-meteor-wrapasync我只是不知道如何返回来自 Stripe 的调用的响应。我正在使用 console.log 来打印步骤,我已经到达了 throw 4 这意味着,我到达了 stripe 服务器并获得了响应,但在那之后我可以不明白为什么 console.log(5) 不打印。如果有人可以帮助我理解为什么它的 wrapAsyn 不返回 Stripe 回调,请问?

    //this functions are part of an anonymous function and running in the server side of meteor
stripe.charge = function (stripeToken) {
// get a sync version of our API async func
var strypeChargeSync = Meteor.wrapAsync(stripe.charge.process);

// call the sync version of our API func with the parameters from the method call

console.log("1");

var response = strypeChargeSync(stripeToken);

console.log("5" + response); ///// this never get print / log
return response;
}

stripe.charge.process = function(stripeToken){
var _stripe = StripeAPI(stripeKey);
console.log("2");
var charge = _stripe.charges.create({
amount: 1000, // amount in cents, again
currency: "cad",
card: stripeToken.id,
description: "paid@whatever"
}, function(err, charge) {
if (err && err.type === 'StripeCardError') {
alert("Sorry we couldn't charge the money: " + err);
//console.log(err);
}else{
console.log("4");
//console.log(charge);
return charge;
}
});
console.log("3");
}

//当前输出 1,2,3,4 但从不输出 5 :(

编辑

这就是我结束使用 Stripe 功能的方式,感谢您的支持

    var syncFunction = Meteor.wrapAsync(_stripe.charges.create, _stripe.charges);
var response = syncFunction({
amount: 1000, // amount in cents, again
currency: "cad",
card: stripeToken.id,
description: "paid@whatever"
});

最佳答案

您在这里包装了错误的函数,Meteor.wrapAsync 将异步函数(这意味着通过回调将其结果传输给调用者的函数)转换为同步函数。

您传递给 Meteor.wrapAsync 的函数没有回调作为最终参数,您应该包装 _stripe.charge.create

stripe.charge = function (stripeToken) {
var _stripe = StripeAPI(stripeToken);
var stripeChargeSync = Meteor.wrapAsync(_stripe.charge.create,_.stripe.charge);
var response = stripeChargeSync({
amount: 1000, // amount in cents, again
currency: "cad",
card: stripeToken.id,
description: "paid@whatever"
});
return response;
};

如果你想处理错误,你应该在调用 stripe.charge 时使用 try/catch block 。

try{
stripe.charge(STRIPE_TOKEN);
}
catch(exception){
console.log("Sorry we couldn't charge the money",exception);
}

我看到您正在使用 alert 记录错误,您是否尝试在客户端上使用 Meteor.wrapAsyncMeteor.wrapAsync 旨在在服务器上使用,因为提供同步执行所需的环境在 Node.js 而非浏览器中可用。

关于javascript - Meteor.WrapAsync 不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26322617/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com