-1
私はthisのstackoverflowの答えを知っていて、私はそれを助けるために使用されています。 私の状況にコードを適用すると奇妙なことが起こります。 私のコードでexecSyncと呼ばれるwrapAsync関数が実行され、想定されているものを出力しているようです。しかし、それは私がwrapAsyncを所定の場所に置く前に最後に終わったばかりです。Meteor 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が正しくラップしていないと思います。 – Bergi