【发布时间】: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