使用contextify从节点vm内部返回异步结果

时间:2016-05-13 22:30:04

标签: javascript node.js asynchronous

我使用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外面收到一条消息吗?

1 个答案:

答案 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
    });

但是,如果你真的不信任代码,我会创建一个辅助匿名函数来保护回调本身不被修改。