我相当新的javascript回调式编程风格。 有没有办法强制代码等待,直到一个函数调用通过回调完成? 让我解释一下。 以下函数接受一个数字并根据它返回结果。暂停,直到调用回调,在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
调用回调,然后返回答案吗?
即使你可以等待,你所要求的非响应浏览器通过这样做。 – JohnFx 2010-06-29 23:18:23
这很公平。我的目的是确定它实际上是不可能的,以创建一个返回通过回调获得的值的函数。 – jameshfisher 2010-06-29 23:19:01