使用 JavaScript 的 OpenCPU 和异步编程
OpenCPU and asynchronous programming with JavaScript
我尝试通过 OpenCPU 从 MySQL 数据库中获取一些数据到我的 JavaScript-WebApp 中。不知何故我无法解决以下问题:
我的 JavaScript 函数看起来像这样:
var array; //contains IDs already
function getStuffFromDb(){
for(var i in array){
var query = "SELECT value FROM table WHERE id=" + array[i].id + ";";
ocpu.call("queryDb",{
query : query
}, function(session){
session.getObject(function(data){
array[i].data = data;
});
});
}
}
我在这里为数组中的每个 ID 调用 R 函数 "queryDb"。问题是这仅在数组长度为 1 时有效,这似乎是正确的,因为 ocpu.call 异步工作。所以我可以在这里想到两个解决方案,但还没有任何工作。
思路一:将另一个参数传递给包含当前数组索引的R函数。然后让 R 函数 return 再次返回索引,以便我可以将数据插入数组的正确位置。这看起来应该有点像:
...
query : query,
index : i
...
session.getObject("index", function(index){
...
想法2:我认为必须有一种不传递索引的更方便的方法,但不幸的是我不知道如何实现它。我尝试使用 ocpu.rpc,因为我认为它是同步的,但结果是一样的。
最后,想法 2 对我来说似乎是更好的选择,但我不知道该怎么做。想法 1 的问题是,除了被调用的 R 函数的 return 值之外,我找不到任何关于如何访问任何值的示例。我不会像我上面写的那样通过使用 session.getObject 方法传递它的名称来调用在被调用的 R 函数中设置的变量吗?我得到的一切都是 "Object 'index' not found in call:get(reqobject, envir = sessionenv, inherits = FALSE)".
我真的很感激这里的一些帮助,因为我迷失在所有这些异步和 R 的东西中。所以在此先感谢您的回答!
想法 2 听起来还不错……您可能必须摆脱循环并一个接一个地获取数据。只调用下一个异步操作,当最后一个完成时!
我尝试通过 OpenCPU 从 MySQL 数据库中获取一些数据到我的 JavaScript-WebApp 中。不知何故我无法解决以下问题:
我的 JavaScript 函数看起来像这样:
var array; //contains IDs already
function getStuffFromDb(){
for(var i in array){
var query = "SELECT value FROM table WHERE id=" + array[i].id + ";";
ocpu.call("queryDb",{
query : query
}, function(session){
session.getObject(function(data){
array[i].data = data;
});
});
}
}
我在这里为数组中的每个 ID 调用 R 函数 "queryDb"。问题是这仅在数组长度为 1 时有效,这似乎是正确的,因为 ocpu.call 异步工作。所以我可以在这里想到两个解决方案,但还没有任何工作。
思路一:将另一个参数传递给包含当前数组索引的R函数。然后让 R 函数 return 再次返回索引,以便我可以将数据插入数组的正确位置。这看起来应该有点像:
...
query : query,
index : i
...
session.getObject("index", function(index){
...
想法2:我认为必须有一种不传递索引的更方便的方法,但不幸的是我不知道如何实现它。我尝试使用 ocpu.rpc,因为我认为它是同步的,但结果是一样的。
最后,想法 2 对我来说似乎是更好的选择,但我不知道该怎么做。想法 1 的问题是,除了被调用的 R 函数的 return 值之外,我找不到任何关于如何访问任何值的示例。我不会像我上面写的那样通过使用 session.getObject 方法传递它的名称来调用在被调用的 R 函数中设置的变量吗?我得到的一切都是 "Object 'index' not found in call:get(reqobject, envir = sessionenv, inherits = FALSE)".
我真的很感激这里的一些帮助,因为我迷失在所有这些异步和 R 的东西中。所以在此先感谢您的回答!
想法 2 听起来还不错……您可能必须摆脱循环并一个接一个地获取数据。只调用下一个异步操作,当最后一个完成时!