如何从同步回调中​​返回?

时间:2016-09-02 06:51:39

标签: javascript callback

首先,看一下这个样本:

var calculate = function(callback) {
  // calculating...
  callback(5);
}

var parent = function() {
  var x = 0;

  var calculatedValue = calculate(function(output) {
    return output; // return #1

    x = output;
  });

  return x; // return #2

  return calculatedValue; // return #3
}

我的目标是"计算" calculate函数中的值,此值必须由parent函数返回。

为了达到这个目的,我应该在哪里放置return语句,以及我应该返回什么?

我尝试了3个案例:

return #1 这里output函数返回callback值,而不是parent函数,因此父级返回undefined。

return #2 这里在执行callback函数之前返回x的值,因此parent返回0.

return #3 + return #1 在这里,我尝试从output返回callback,然后(认为回调的返回值可能以某种方式成为calculate本身的返回值),返回{{ 1}},但同样,parent返回undefined。

请建议一种方式,然后选择here

1 个答案:

答案 0 :(得分:4)

在这个特定的情况下,你的回调是同步,这意味着你可以这样回来:

var calculate = function(callback) {
  // calculating...
  return callback(5);
}

然后,您可以像这样返回父母:

var parent = function() {    
  var calculatedValue = calculate(function(output) {
    return output; // tells the callback to do nothing with the output, just return it.
  });

  return calculatedValue; // return from parent
}

请注意,如果calculate异步函数,则此方法不起作用。请查看How do I return the response from an asynchronous call?