我试图在我的Meteor应用程序中使用此NPM包:Gumroad-API。当我尝试在Promise回调中进行Meteor方法调用(或集合插入)时,我在服务器端遇到问题。
以下是我的两个Meteor方法的代码:
Meteor.methods({
testMethod: () => {
console.log('TEST METHOD RUN');
},
fetchGumroadData: () => {
const Gumroad = Meteor.npmRequire('gumroad-api');
let gumroad = new Gumroad({ token: Meteor.settings.gumroadAccessKey });
Meteor.call('testMethod'); // runs fine
gumroad.listSales('2014-12-04', '2099-12-04', 1).then((result) => {
console.log('1'); // runs fine
Meteor.call('testMethod'); // execution halts here w/o error msg
console.log('2'); // this never runs
});
},
});
每当我尝试在其中.then()
时,Meteor.call()
回调中的代码总是停止(没有错误消息)。
当我将Meteor.call()
替换为Collection.insert()
时,我会得到相同的行为,例如:Sales.insert({text:'test'});
。
答案 0 :(得分:2)
旧问题但是,失败的原因是因为回调中没有Meteor环境。
警告这是未经测试的代码
Meteor.methods({
testMethod: () => {
console.log('TEST METHOD RUN');
},
fetchGumroadData: () => {
const Gumroad = Meteor.npmRequire('gumroad-api');
let gumroad = new Gumroad({ token: Meteor.settings.gumroadAccessKey });
Meteor.call('testMethod'); // runs fine
gumroad.listSales('2014-12-04', '2099-12-04', 1)
.then(Meteor.bindEnvironment((result) => {
console.log('1'); // runs fine
Meteor.call('testMethod'); // execution halts here w/o error msg
console.log('2'); // this never runs
}));
},
});
关于bindEnvironment和wrapAsync的教程可以在这里找到:https://www.eventedmind.com/items/meteor-what-is-meteor-bindenvironment