0
私はnodejs vmでいくつかの例を試しています。以下のLOCを参照してください。NodeJS VMはコールバックを呼び出していませんか?同じことをする他の方法?
var vm = require('vm');
var jsonObject = {
"yahoo" : 200
}
var context = {
jsonObjectToPopulate: jsonObject,
result: null, // this will be populated in code execution
setTimeout : setTimeout,
done : function(){
console.log(context.result);
},
next : function(data){
console.log('data = '+data);
this.result = data;
this.done();
}
};
var jsCode = "var customFun = function(jsonObjectToPopulate){ " +
"setTimeout(function(){" +
"next(300)}, 3000);" +
"};" +
"customFun(jsonObjectToPopulate);";
vm.runInNewContext(jsCode, context);
とログです
data = 300
/Users/alokguha/dev/microflow/issues/1717/nodetest/vm/vmTest.js:21
this.done();
^
TypeError: this.done is not a function
at context.next (/Users/alokguha/dev/microflow/issues/1717/nodetest/vm/vmTest.js:21:14)
at null._onTimeout (evalmachine.<anonymous>:1:56)
at Timer.listOnTimeout (timers.js:89:15)
ノードバージョン:v4.0.0
ので、私の質問は
- なぜ "完了" を関数として認識されないされていますか?
- 最終的に私はVMが私に非同期コードからの結果を返すまで待つことを望んでいます。それで、同じことを達成するための正しいやり方です。
アプローチはどうですか?このような問題を解決する正しい方法だと思いますか? –