【问题标题】:Meteor WrapAsync working asynchronouslyMeteor WrapAsync 异步工作
【发布时间】:2016-08-24 11:24:09
【问题描述】:

我知道this stackoverflow 的答案,我一直在用它来帮助我。 但是,当我将代码应用于我的情况时,会发生一些奇怪的事情。 似乎在我的代码中称为 execSync 的 wrapAsync 函数运行并输出了它应该执行的操作;但是,它刚刚完成,就像我安装 wrapAsync 之前一样。

代码

Meteor.methods({
  'distinctSpecs'({}){
    console.log("called");
    var json_categories_clean   =   [];
    var execSync                =      
      Meteor.wrapAsync(require("child_process").exec, 
                       require("child_process"))
    var returned_data           =   
      execSync(
        "mongo products --eval \"var collection='laptops', outputFormat='json'\" variety.js", 
        { cwd:"/home/jonathan/Documents/variety-master"}, 
        (err, stdout, stderr) => {
          if (err) {
            console.error(err);
            console.log(stdout);
            console.log(stderr);
            return;
          }
          console.log("waited for this");
          var     json_categories         =   
            JSON.parse(stdout.substring(
              stdout.indexOf('[', stdout.indexOf('[')+1),
              stdout.lastIndexOf(']')+1));     

          for (var x=0; x < json_categories.length; x++) {
            json_categories_clean.push(json_categories[x]["_id"])
          }
          console.log("returning inner");
          return json_categories_clean;
        });
    console.log("returning outer");
    return returned_data;
  }
});

**输出**

 called 
returning outer 
waited for this 
returning inner

【问题讨论】:

  • 我认为您不应该将回调传递给execSync。尝试不使用,如果您传递错误数量的参数,我猜 Meteor 不会正确包装。

标签: javascript asynchronous meteor


【解决方案1】:

格式化您的代码后,很明显您正在调用 wrapAsync 错误:

Meteor.wrapAsync(require("child_process").exec, 
                       require("child_process"))

你可能想要:

const exec = Npm.require("child_process").exec;
Meteor.wrapAsync(a, b, function(callback) {
  exec(a, b, function(err, stdout, stderr) {
    callback(err, stdout);
  });
});

您包装的函数的最后一个参数必须是一个将错误和结果作为参数的函数(仅此而已)。

另外,一旦你有了异步函数,你就不再提供回调了。你正在等待返回。

【讨论】:

    猜你喜欢
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2015-02-20
    相关资源
    最近更新 更多