我对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
调用回调,然后返回该答案?
答案 0 :(得分:2)
在浏览器Javascript中几乎没有“等待”。这都是关于回调的。请记住,您的回调可以是“闭包”,这意味着可以从创建它们的上下文中“捕获”局部变量的函数定义。
如果你接受这种做事方式,你会变得更快乐。
答案 1 :(得分:0)
添加缺少的回报:)
function get_expensive_thing(n) {
return fetch_from_disk(n, function(answer) {
return answer;
});
}