Javascript Stripe.create函数的顺序不正确

Javascript Stripe.create函数的顺序不正确,javascript,node.js,stripe-payments,Javascript,Node.js,Stripe Payments,我想将Stripe集成到我的应用程序中。我已在请求正文中收集了所有必要的数据。 现在,在创建客户Id并尝试将其传递给addCustomerToCard后,将抛出一个未定义的错误。之后,createToken将被成功记录 所以有两个问题: 1.为什么函数的顺序没有像我预期的那样被调用? 2.为什么客户没有通过addCustomerToCard router.post("/checkout", async function (req, res, next) { if (!req.session.

我想将Stripe集成到我的应用程序中。我已在请求正文中收集了所有必要的数据。 现在,在创建客户Id并尝试将其传递给addCustomerToCard后,将抛出一个未定义的错误。之后,createToken将被成功记录

所以有两个问题: 1.为什么函数的顺序没有像我预期的那样被调用? 2.为什么客户没有通过addCustomerToCard

router.post("/checkout", async function (req, res, next) {
  if (!req.session.cart) {
    return res.redirect("/shopping-cart");
  }
  let createCustomer = function () {
    var param ={};
    param.email = req.body.email;
    param.name= req.body.name;
    param.description ="";
    return stripe.customers.create(param, function (err, customer) {
      if (err) {
        console.log("err:" + err);
      }
      if (customer) {
        console.log("success: " + JSON.stringify(customer, null, 2));
      } else {
        console.log("something went wrong");
      }
    });


  };

  let createToken = function () {
    let param ={};
    param.card = {
      number: req.body.card,
      exp_month: req.body.exp_month,
      exp_year: req.body.exp_year,
      cvc: req.body.security
  }
    return stripe.tokens.create(param, function (err, token) {
      if (err) {
        console.log("err:" + err);
        console.log(param);
      }
      if (token) {
        console.log("success: " + JSON.stringify(token, null, 2));
        console.log(req.body);
      } else {
        console.log("something went wrong");
      }
    });
  };




  let addCardToCustomer = function () {
    console.log(createdCustomer);
   return stripe.customers.createSource(customer.id, {source: token.id}, function (err, card) {
     if (err) {
       console.log("err:" + err);
       console.log(param);
     }
     if (card) {
       console.log("success: " + JSON.stringify(card, null, 2));
     } else {
       console.log("something went wrong");
     }
   });
 };

 let chargeCustomerThroughCustomerID = function () {
   let param = {
     amount: cart.totalPrice,
     currency: 'eur',
     description: 'First payment',
     customer: customer.id
   }

   stripe.charges.create(param, function (err, charge) {
     if (err) {
       console.log("err: " + err);
     }
     if (charge) {
       console.log("success: " + JSON.stringify(charge, null, 2));
     } else {
       console.log("Something wrong")
     }
   })
 }


  try {
    const createdCustomer = await createCustomer(); // promise 1
    const createdToken = await createToken();
    const addedCardToCustomer = await addCardToCustomer(createdCustomer,createdToken ); // 
    // const chargeCustomerThroughCustomerID = await chargeCustomerThroughCustomerID(); // promise 4


    res.send("success");

  } catch (e) {
    console.log(`error ${e}`)
  };



});

//LOG OUTPUT


//success
//error ReferenceError: createdCustomer is not defined
//success

首先,您应该将其分解为更小的部分,以验证您期望的行为。这里发生了很多事情

一个问题是,您试图等待的函数不是
异步的
——您应该将每个函数标记为:

let createCustomer = async function () {...}
这可能是序列不是您期望的原因

您在
addCardToCustomer
中遇到错误,因为
createCustomer
在该函数中是
未定义的。您需要有一个参数:

let addCardToCustomer = async function (createdCustomer) { ... }