一千萬個為什麽

搜索

暫停,直到調用回調,在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 調用回調,然後返回該答案?

最佳答案

幾乎沒有在瀏覽器Javascript中“等待”。這都是關於回調的。請記住,您的回調可以是“閉包”,這意味著從捕獲它們的上下文中“捕獲”局部變量的函數的定義。

如果你接受這種做事方式,你會變得更快樂。

轉載註明原文: 暫停,直到調用回調,在Javascript中