我尝试通过 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 异步工作。所以我可以在这里想到两个解决方案,但还没有任何工作。
想法1:将另一个参数传递给包含当前数组索引的R函数。然后让 R 函数再次返回该索引,以便我可以将数据插入数组的正确位置。这应该看起来像这样:
...
query : query,
index : i
...
session.getObject("index", function(index){
...
想法2:我认为必须有一种更方便的方法而不传递索引,但不幸的是我不知道如何实现它。我尝试使用 ocpu.rpc,因为我认为它是同步的,但结果是一样的。
最后,想法 2 对我来说似乎是更好的选择,但我不知道该怎么做。想法 1 的问题是,除了被调用的 R 函数的返回值之外,我找不到任何关于如何访问任何值的示例。我不会像上面写的那样通过 session.getObject-method 传递其名称来调用在被调用的 R 函数中设置的变量吗?我得到的一切都是“在调用中找不到对象'索引':get(reqobject,envir = sessionenv,inherits = FALSE)”。
我真的很感谢这里的一些帮助,因为我迷失在所有这些异步和 R 的东西中。所以提前感谢任何答案!