我是javascript的初学者,我仍然无法绕过传递函数和此类问题。我需要在回调中设置一个值,然后在该函数完成执行后返回它。但是,在达到return语句之前,似乎永远不会执行此函数。这是一个简化的例子:
function otherfunction(somefunction) {}
function foo() {
var bar = 'random value';
otherfunction(function() {
bar = 'correct value';
});
return bar;
}
console.log(foo());
这是jsfiddle。
答案 0 :(得分:4)
<强> TL; DR 强>;你不能。
当一个函数签名接受一个函数时,它尖叫该函数是异步的,并在它完成后调用该函数作为回调。
在这种情况下,otherfunction
将是异步函数,somefunction
将在otherfunction
完成执行后作为回调执行。
现在,您无法从同步函数(otherfunction
)返回异步函数(foo
)的结果。相反,您在otherfunction
中调用foo
后,在回调中执行demo)延迟执行代码;
function foo() {
otherfunction(function() {
var bar = 'correct value';
console.log(bar);
});
}
现在我感谢您可能希望对otherfunction
的结果做不同的事情;不总是console.log
它;您可以通过将foo
修改为 接受回调来解决此问题;
function foo(callback) {
otherfunction(function() {
var bar = 'correct value';
callback(bar);
});
}
然后你会将其称为(demo);
foo(function (newBar) {
console.log(newBar);
});
foo(function (newBar) {
// do whatever with newBar
});