javascript - 使用 contextify 从 Node vm 内部返回异步结果

标签 javascript node.js asynchronous

我正在使用 contextify ( https://www.npmjs.com/package/contextify ) 在 Node 沙箱中运行异步“不受信任”脚本。同样的问题也适用于 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

是否有任何未记录的函数或事件可以让我知道虚拟机何时执行了所有操作? 或者有没有一种聪明的方法来包装这个请求 promise 函数,以便我在虚拟机之外收到消息?

最佳答案

只需创建一个匿名函数来处理要传递的回调。

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

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

关于javascript - 使用 contextify 从 Node vm 内部返回异步结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37220247/

相关文章:

javascript - (懒惰)重构后加载谷歌地图不起作用

javascript - 使json符合Bootstrap Treeview格式

javascript - 通过自定义 Angular Material 模块导入组件

ruby - 终端 curl : (7) Failed to connect to localhost port 3000: Connection refused

javascript - 如何从递归异步回调返回值?

javascript - 异步 Lambda 函数 : Returning promise or sending responseURL does not terminate CloudFormation custom resource invocation

javascript - 将自定义下一张幻灯片按钮添加到 Unslider 脚本

node.js - MacOS Electron JS 安装缺少路径链接

node.js - 有没有办法在 RichEmbed 中嵌入超链接?

ASP.NET 异步方法问题