Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor with patrickml:braintree代码必须始终在光纤中运行_Meteor_Braintree - Fatal编程技术网

Meteor with patrickml:braintree代码必须始终在光纤中运行

Meteor with patrickml:braintree代码必须始终在光纤中运行,meteor,braintree,Meteor,Braintree,此Meteor服务器代码(主要是从其他服务器复制和粘贴)导致以下错误: 错误:Meteor代码必须始终在光纤中运行。尝试使用Meteor.bindEnvironment包装传递给非Meteor库的回调 它会将付款发送到Braintree沙箱,但一旦完成“查看服务器代码的底部”,我需要在服务器上做一些事情,如何修复它 我尝试了'createTransaction:Meteor.wrapAsync(函数(非EFromtheclient,Payment){…})但无效 //client.account

此Meteor服务器代码(主要是从其他服务器复制和粘贴)导致以下错误:

错误:Meteor代码必须始终在光纤中运行。尝试使用Meteor.bindEnvironment包装传递给非Meteor库的回调

它会将付款发送到Braintree沙箱,但一旦完成“查看服务器代码的底部”,我需要在服务器上做一些事情,如何修复它

我尝试了
'createTransaction:Meteor.wrapAsync(函数(非EFromtheclient,Payment){…})但无效

//client.account.js
Template.account.onRendered(function () { //6a
  Meteor.call('getClientToken', function (error, clientToken) {
    if (error) {
      console.log(error);
    } else {
      braintree.setup(clientToken, "dropin", {
        container: "payment-form",
        onPaymentMethodReceived: function (response) {
          var nonce = response.nonce;
          Meteor.call('btCreateCustomer', function (error) {
            if (error) {
              throw new Meteor.Error('customer-creation-failed');
            } else {
              let e = document.getElementById("invoice");
              let label = e.options[e.selectedIndex].text;
              let Payment = {
                amount: /\$(.*?) /g.exec(label)[1],
                period: /(.*? .*?) /g.exec(label)[1]
              };
              Meteor.call('createTransaction', nonce, Payment, function (error) {
                if (!error) {
                  //do stuff.
                }
              });
            }
          });
        }
      });
    }
  });
});

//server.main.js
Meteor.methods({
  'getClientToken': function (clientId) {
    let generateToken = Meteor.wrapAsync(gateway.clientToken.generate, gateway.clientToken);
    let options = {};
    if (clientId) {
      options.clientId = clientId;
    }

    let response = generateToken(options);
    return response.clientToken;
  },
  'btCreateCustomer': function () {
    let user = Meteor.user();
    let customerData = {
      email: user.emails[0].address
    };

    gateway.customer.create(customerData, function (error, response) {
      if (!error) {
        Meteor.users.update(user._id, {
          $set: {
            customerId: response.customer.id
          }
        });
      }
    });
  },
  'createTransaction': function (nonceFromTheClient, Payment) {
    let user = Meteor.user();
    gateway.transaction.sale({
      amount: Payment.amount,
      paymentMethodNonce: nonceFromTheClient, // Generated nonce passed from client
      customer: {
        id: user.customerId
      },
      options: {
        submitForSettlement: true, // Payment is submitted for settlement immediately
        storeInVaultOnSuccess: true // Store customer in Braintree's Vault
      }
    }, function (err) {
      if (!err) {
        // ------------- next line fail due to Fiber issue ------------------ 
        console.log('Paid ' + Payment.amount + " for period " + Payment.period);
      }
    });
  }
});

提交
尝试将回调包装到:

gateway.transaction.sale({/*args*/},Meteor.bindEnvironment(函数(err)){
如果(!err){
console.log('Nice!');
}
}));

您说您尝试了Meteor.wrapAsync
,但结果不一样。我尝试了您的解决方案,但不起作用,即出现了相同的错误。