数组项未推送到async.queue

时间:2018-05-29 12:29:59

标签: javascript arrays asynchronous stripe-payments async.js

我有一系列客户,我创建了一个队列来为每个客户收费。它向第一个客户收费,但不会将下一个客户推到队列中。我错过了什么?以下是我的代码。

let q = async.queue(async(customer, callback) =>{
   let r =  await stripe.charges.create({
            amount: customer.amount ,
            currency: "usd",
            customer: customer.customerId,
            source: customer.token
        }, {
            idempotency_key: customer.uuid
        });  
 },1)
 async.forEach(customers, async(customer, callback)=> {
   q.push(customer, function(err){
        if(err){
            console.log(err,"errr==========")
        }
    })
 }) 

1 个答案:

答案 0 :(得分:0)

你在这里将async / await与回调混合在一起,而你永远不会调用async.forEach()回调。

let q = async.queue((customer, callback) => {
  stripe.charges.create({
    amount: customer.amount ,
    currency: "usd",
    customer: customer.customerId,
    source: customer.token
  }, {
    idempotency_key: customer.uuid
  }, callback);  
},1)

customers.forEach((customer) => {
  q.push(customer, (err, cus) => {
    if(err){
      console.log(err,"errr==========")
    }

    // Do whatever
  })
});

您还要确保customer.token是卡ID,而不是令牌ID;如果它是您用来创建客户的令牌ID,那么您不需要它,如果它是新的卡令牌,您需要先更新客户或将其添加到客户。