Javascript 在Meteor方法中承诺后插入到集合中

Javascript 在Meteor方法中承诺后插入到集合中,javascript,node.js,meteor,Javascript,Node.js,Meteor,我使用这个npm包是为了从外部服务(Gumroad)获取数据。不幸的是,它似乎使用了.then()构造,这可能会变得有点笨拙,您将在下面发现: 这是我的流星法: Meteor.methods({ fetchGumroadData:()=>{ const Gumroad=流星npmRequire(“Gumroad-api”); 让gumroad=新的gumroad({token:Meteor.settings.gumroadAccessKey}); let before=“2099-12-04”;

我使用这个npm包是为了从外部服务(Gumroad)获取数据。不幸的是,它似乎使用了
.then()
构造,这可能会变得有点笨拙,您将在下面发现:

这是我的流星法:

Meteor.methods({
fetchGumroadData:()=>{
const Gumroad=流星npmRequire(“Gumroad-api”);
让gumroad=新的gumroad({token:Meteor.settings.gumroadAccessKey});
let before=“2099-12-04”;
在=“2014-12-04”之后出租;
设page=1;
让销售额=[];
//递归定义以继续获取下一页(如果存在)
让doThisAfterResponse=(响应)=>{
销售。推送(响应。销售);
如果(响应。下一页\u url){
页码=页码+1;
listSales(之后、之前、页面)。然后(doThisAfterResponse);
}否则{
设finalArray=R.unest(销售);
log('结果数组长度:'+finalArray.length);
Meteor.call('insertSales',finalArray);
console.log('FINISHED');
}
}
listSales(之后、之前、页面).then(doThisAfterResponse);//运行
}
});
由于NPM包使用如下方式公开了Gumorad API:

gumroad.listSales(after, before, page).then(callback)
我决定递归地这样做,以获取所有页面的数据

让我尝试重新定义这里发生的事情:

  • 旅程从上面显示的代码的最后一行开始
  • 获取初始页面,并第一次运行
    dothisaterresponse()
  • 我们首先将返回的数据转储到我们的
    销售
    数组中,然后检查响应是否为我们提供了到下一页的链接(作为我们是否在最后一页的指示)
  • 如果是这样,我们将增加页面计数,并使用相同的函数再次调用API以再次处理响应
  • 如果没有,这意味着我们已经到了最后一页。现在是使用
    R.unest
    格式化数据的时候了,最后将
    finalArray
    数据插入我们的数据库
  • 但这里发生了一件有趣的事。整个执行在
    Meteor.call()
    处停止,我甚至没有得到服务器日志的错误输出

    我甚至尝试过为了一个简单的:
    Sales.insert({text:'testing'})
    而关闭
    Meteor.call()
    ,但是观察到了完全相同的行为

    我真正需要做的是获取信息,然后将其存储到服务器上的数据库中。我怎样才能做到这一点

    编辑:请再看另一个(简化得多),所以我提出了一个问题:


    我最终放弃了NPM包,编写了自己的API调用。我永远不知道如何在
    .then()
    中进行调用。代码如下:

    fetchGumroadData:()=>{
    让销售额=[];
    常量fetchData=(第1页)=>{
    让选项={
    数据:{
    访问令牌:Meteor.settings.gumroadAccessKey,
    在“2099-12-04”之前,
    “2014-12-04”之后,
    第页:第页,
    }
    };
    调用('GET','https://api.gumroad.com/v2/sales,选项,(错误,恢复)=>{
    如果(错误){//API调用失败
    控制台日志(err);
    犯错误;
    }else{//API调用成功
    sales.push(…res.data.sales);
    res.data.next\u page\u url?fetchData(第+1页):Meteor.call('addSalesFromAPI',sales);
    }
    });
    };
    fetchData();//运行函数以递归方式获取数据
    }
    
    您可能应该兑现承诺,让它发挥作用。例如:
    return gumroad.listSales(之后、之前、页面)。然后(dothisfeaterresponse)在两个位置。但这完全取决于流星方法是如何传递的。注:我不是流星人