暂停,直到调用回调,在Javascript中

时间:2010-06-29 22:51:08

标签: javascript callback

我对javascript中的回调式编程很新。 有没有办法强制代码等待函数调用通过回调完成? 让我解释。 以下函数接受一个数字并根据它返回结果。

function get_expensive_thing(n) {
  return fetch_from_disk(n);
}

到目前为止,很容易。 但是当fetch_from_disk通过回调返回结果时我该怎么办? 像这样:

function get_expensive_thing(n) {
  fetch_from_disk(n, function(answer) {
    return answer; // Does not work
  });
}

上述方法不起作用,因为return在匿名函数的范围内, 而不是get_expensive_thing函数。

有两种可能的“解决方案”,但两者都不充分。 一种是通过回调重构get_expensive_thing给自己答案:

function get_expensive_thing(n, callback) {
  fetch_from_disk(n, function(answer) {
    callback(answer);
  });
}

另一种是重新编码fetch_from_disk,但这不是一种选择。

我们如何才能达到预期的效果 同时保持get_expensive_thing的理想行为 - 即等到fetch_from_disk调用回调,然后返回该答案?

2 个答案:

答案 0 :(得分:2)

在浏览器Javascript中几乎没有“等待”。这都是关于回调的。请记住,您的回调可以是“闭包”,这意味着可以从创建它们的上下文中“捕获”局部变量的函数定义。

如果你接受这种做事方式,你会变得更快乐。

答案 1 :(得分:0)

添加缺少的回报:)

function get_expensive_thing(n) {
  return fetch_from_disk(n, function(answer) {
    return answer;
  });
}