Javascript 在Meteor方法中承诺后插入到集合中
我使用这个npm包是为了从外部服务(Gumroad)获取数据。不幸的是,它似乎使用了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”;
.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()
销售
数组中,然后检查响应是否为我们提供了到下一页的链接(作为我们是否在最后一页的指示)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)代码>在两个位置。但这完全取决于流星方法是如何传递的。注:我不是流星人