javascript - 在 Javascript 中暂停直到调用回调

标签 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 调用回调,然后返回那个答案?

最佳答案

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

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

关于javascript - 在 Javascript 中暂停直到调用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145356/

相关文章:

javascript - 通过过滤未定义计算对象数组的平均值

node.js - 如何从异步调用返回值

javascript - 如何处理angularjs中的回调?

javascript - 如何在回调中访问正确的“this”?

c - 将 int 传递给 C 回调

javascript - Hubspot:HTML 元素的自定义属性

javascript - AngularJS D3。如何将任何内容附加到现有图表(在其上绘制)?

javascript - 获取数据表中多个日期选择器的值

c - C 回调函数的参数 : va_list, 和省略号哪个更好?

javascript - 在 tr 中追加 td,然后在 tbody 中追加