使用回调函数更新JSON对象
Using callback functions to update a JSON object
所以我有一个db_functions.js文件,其中包含一些与数据库交互的函数。这是其中的一部分:
function getUsers(client, fn){
//var directors = {};
client.keys('*', function(err, keys){
keys.forEach(function(key){
client.hgetall(key, function(err, vals){
fn(key, vals);
});
});
});
我在另一个文件中使用getUsers函数:
router.get('/accounts', function(req, res){
var dir = {};
db_functions.getUsers(client, function(key, vals, cb){
dir[key] = vals;
cb(dir);
function cb(f){
var final_dir = {};
console.log(f)
res.json(f);
}
}
)});
我试图使用回调从数据库中获取一些信息,用这些信息更新JSON对象,当我用所有信息更新对象时,将JSON对象作为响应发送。
问题出在cb函数中,res.json被多次调用,这会出现"发送后无法设置标头"错误。res.json只应在dir完成更新后调用
res.json只应在dir完成更新后调用
为什么不在收集完所有数据后才调用getUsers
回调?
function getUsers(client, fn){
client.keys('*', function(err, keys) {
var values = {};
var remainingRequests = keys.length;
keys.forEach(function(key) {
// Note that this will run keys.length requests in parallel
// forEach does not (and cannot) wait for the async calls to finish
client.hgetall(key, function(err, vals){
remainingRequests -= 1;
if (!err) {
values[key] = vals;
}
if (remainingRequests === 0) {
fn(values);
}
});
});
});
}
outer.get('/accounts', function(req, res){
db_functions.getUsers(client, function(values){
res.json(values);
});
});
你指的是AJAX回调方法吗?类似:
var jqxhr = $.get( "example.php", function(return_data) {
console.log( return_data );
})
.done(function() {
console.log( return_data );
})
.fail(function() {
console.log( return_data );
})
.always(function() {
console.log( return_data );
});
相关文章:
- jQuery匹配JSON对象的部分文本
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 如何为json对象中的段发送array[]
- 将JSON对象传递给angular指令
- 更改JSON对象的结构
- 访问JSON对象内部的数组元素
- 在ejs-partial中对JSON对象进行迭代
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 访问嵌套JSON对象的键,其中键是动态的
- json对象中缺少对象循环
- 发送json对象或使用express路由呈现视图
- 在play2框架中向json对象添加下拉列表项
- 元素名称上带有短划线 (-) 字符的 Json 对象
- autocomplete不接受源的json对象
- 如何在javascript中创建动态json对象
- 在使用客户端脚本时拾取JSON对象
- 如何通过json对象数组为嵌套对象赋值
- 构造JSON对象