在Promise Callback中调用Meteor方法[暂停没有错误]

时间:2015-12-20 02:03:03

标签: javascript node.js meteor npm promise

我试图在我的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'});

1 个答案:

答案 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