使用未定义的函数参数调用流星异步ValidatedMethod

时间:2019-01-28 11:52:03

标签: meteor async-await meteor-methods

someMethod = new ValidatedMethod({
    name: 'someMethodName',
    validate: new SimpleSchema({
        subId: {type: String, min:1},
        planId: {type: String}        
    }).validator(),
    async run(params){
        try{
                     //params is undefined
        } 

    }
});

使用async run(params)会使params成为undefined(似乎上下文切换为Global上下文)。删除async可以很好地工作(但显然我不能再在方法主体中使用await了)。 为什么会这样,以及如何在ValidatedMethod中使用await?

注意1::我像这样从客户端调用该方法-如果尝试使用常规的Meteor.methods({})定义,则会得到相同的结果。我正在从客户端使用Meteor.apply调用该方法

ClientHelpers.callWithPromise = function(methodName, methodArgs){
  //methodArgs must be an array
  return new Promise(function(resolve, reject){
    Meteor.apply(methodName, methodArgs, {wait:true}, function(error, result){
      if (error){
        reject(error);
      } 
      console.log(result);
      resolve(result);
    });
  });
}

然后,致电客户(确保paramsObject是正确的):

var myResult = await ClientHelpers.callWithPromise('someMethodName', [paramsObject]);

注意2:我也已将其追溯到Meteor.apply的内部,实际上它是在调试会话中通过DDP发送paramsObject的地方:

  // Sends the DDP stringification of the given message object
  _send(obj) {
    this._stream.send(DDPCommon.stringifyDDP(obj));
  }

非常感谢您的见解。

0 个答案:

没有答案