我在JS中有这个功能:
function redGet(key){
var response;
red.get(key, function (err, reply) {
response = reply;
});
return response;
}
这将继续返回undefined:
console.log(redGet("hello"));
答案 0 :(得分:2)
假设red.get()
是一个类似AJAX的异步函数,问题是你期望它同步运行。在异步操作完成之前,您将无法获得reply
值,这意味着必须在回调函数中调用任何依赖于此值的值。
例如:
function redGet(key){
red.get(key, function (err, reply) {
// do whatever you need to do with the reply value here
console.log(reply);
});
}
redGet("hello");
答案 1 :(得分:0)
您没有说red
是什么,但很可能它的.get()
方法是异步,这意味着redGet()
的执行会立即继续return response
1}}此时值 未定义。只有在.get()
完成处理后,才会执行回调函数以设置response - reply
。
与任何异步代码(也可在Ajax,数据库访问等代码中找到)一样,您可能需要重新构建代码,以便在回调函数中执行依赖于.get()
的返回值的任何代码(或者从回调中调用的其他函数。)
答案 2 :(得分:0)
我猜你的red.get
是一个ajax函数调用(它是异步的)
console.log(..)
在red.get(..)
获得结果之前执行redGet('hello', function(res) {
alert(res)
})
// then in your code
function redGet(key, cb){
red.get(key, function (err, reply) {
cb(reply)
});
}
会发生什么。
如果您仍然希望它能够正常工作,您必须将回调传递给它,例如
{{1}}
答案 3 :(得分:0)
您可以在async:false选项中使用jquery $ .ajax函数。可能是红色变量里面使用了jquery $ .ajax函数,你可以这样做。但它会影响性能。 有关http://api.jquery.com/jQuery.ajax/
的更多信息