0

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

function otherfunction(somefunction) {}

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

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

console.log(foo());

这是jsfiddle

4

1 回答 1

4

TL;博士; 你不能。


当函数签名接受一个函数时,它会尖叫该函数是异步的,并在完成后将该函数作为回调调用

在这种情况下,otherfunction将是异步函数,并在执行完毕后somefunction作为回调otherfunction执行。

现在,您不能otherfunction从同步函数 ( foo) 返回异步函数 ( ) 的结果。相反,您在调用后延迟代码的执行otherfunctionfoo以在回调(演示)中执行;

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
});
于 2013-06-02T16:27:10.040 回答