异步回调完成后返回正确的值

时间:2013-06-02 16:21:17

标签: javascript asynchronous

我是javascript的初学者,我仍然无法绕过传递函数和此类问题。我需要在回调中设置一个值,然后在该函数完成执行后返回它。但是,在达到return语句之前,似乎永远不会执行此函数。这是一个简化的例子:

function otherfunction(somefunction) {}

function foo() {
  var bar = 'random value';

  otherfunction(function() {
    bar = 'correct value';
  });
  return bar;
}

console.log(foo());

这是jsfiddle

1 个答案:

答案 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
});