我正在尝试实现一种在 Node.js VM 中运行“顺序编写”异步 JS 代码并获得对相应上下文对象的访问权限的方法。我尝试使用即将到来的 ES7await
功能,由babel.js
.
在我看来,script.runInContext()在后台运行,而主循环继续,因此我无法从 VM 的上下文中获得结果。
我的示例代码如下:
var vm = require('vm');
var request = require('request-promise');
var babel = require("babel-core");
// VM context object
var contextCache = {
context: {
request: request
}
};
// ES 7 code
var code = "var res = await request('http://www.google.de')";
// Wrap the code
code = "(async function() { " + code + " })()";
// Transpile code ES7 -> ES5
var regeneratedCode = babel.transform(code, { "ast": false, "presets": ["stage-0"] }).code
// Create VM context
var vmContext = new vm.createContext(contextCache.context);
// Create virtual script
var script = new vm.Script(regeneratedCode);
// Run script
script.runInContext(vmContext, {displayErrors: true, timeout: 30000});
// Check if variable was set -> Is undefined
console.log(contextCache.context.res);
有没有办法以同步的方式从上下文评估中检索异步结果?
参考: