具有数据库更新的meteor-method中的流星异步功能

时间:2017-10-23 06:59:19

标签: javascript node.js meteor

最近几个小时,我一直试图让异步方法与流星方法及其数据库一起玩。

虽然使用wrapAsync非常适合简单的方法调用,但在这种情况下我努力让它工作。

非常感谢任何帮助。

https://docs.meteor.com/api/core.html#Meteor-wrapAsync

有问题的异步方法:

chargebee.subscription.list({
  limit : 5, 
  "plan_id[is]" : "basic", 
  "status[is]" : "active",
  "sort_by[asc]" : "created_at"
}).request(function(error,result){
  if(error){
    //handle error
    console.log(error);
  }else{
    for(var i = 0; i < result.list.length;i++){
      var entry=result.list[i]
      console.log(entry);
      var subscription = entry.subscription;
      var customer = entry.customer;
      var card = entry.card;
    }
  }
});

我尝试过但没有工作:

    try {
        var result = Meteor.wrapAsync(chargebee.subscription.list, chargebee.subscription)({
            limit: 5,
            "customer_id[is]": Meteor.userId(),
            "status[is]": "active",
            "sort_by[asc]": "created_at"
        }).request();

        if (result.list[0]) {
            const subscription = result.list[0].subscription;
            console.log("quantity", subscription.plan_quantity);

            Subs.update(
                {
                    owner_id: this.userId
                }, {
                    $set: {
                        quantity: subscription.plan_quantity
                    }
                }
            );
        }
    } catch(error) {
        console.log(error);
    }

1 个答案:

答案 0 :(得分:1)

您应该在Meteor.wrapAsync中包含异步方法本身。在您的代码中,您仅包装chargebee.subscription.list,而不是异步(基于您的示例)。

你应该改为使用.request()方法(而不是它的调用):

// Call to `subscription.list()` extracted
// for better understanding
try {
  var list = chargebee.subscription.list({
    limit: 5,
    "customer_id[is]": Meteor.userId(),
    "status[is]": "active",
    "sort_by[asc]": "created_at"
  });
  var result = Meteor.wrapAsync(list.request)();
  // process result
} catch(error) {
  // process error
}