我使用contextify(RenderScript Support lib)来运行异步'不信任'节点沙箱中的脚本。同样的问题将适用于Node 0.12+ vm.runInContext()。
Contextify = require('contextify');
rp = require('request-promise');
var myCode = "rp('http://www.google.com').then( function (htmlString) { RESULT = htmlString })"
defaultContext = { rp: rp, setTimeout : setTimeout, console: console }
vm = Contextify( defaultContext )
vm.run( myCode );
vm.RESULT
//undefined
是否有任何未记录的函数或事件让我知道vm何时执行了所有操作? 或者有一种聪明的方法来包装这个请求 - 保证函数,以便我在vm外面收到一条消息吗?
答案 0 :(得分:2)
只需创建一个匿名函数来处理要传递的回调。
Contextify = require('contextify');
rp = require('request-promise');
var myCode = "function(callback) { rp('http://www.google.com').then(callback); }"
defaultContext = { rp: rp, setTimeout : setTimeout, console: console }
vm = Contextify( defaultContext )
vm.run( myCode )(function(htmlString) {
// Do what you need here
});
但是,如果你真的不信任代码,我会创建一个辅助匿名函数来保护回调本身不被修改。