2017-10-17 163 views
0

例如,有一個異步函數,我不發展自己,但我知道一個隨機時間(在幾秒鐘內)該函數將返回一個值。 這是否有任何方式等待回報,如果它不返回承諾?如何等待一個值返回,如果它不是承諾

+0

通常情況下,你指定一旦函數結束時調用回調函數正確)。我強烈建議*不要*在同步函數中封裝異步函數,並帶有一些難看的超時等。 – Robert

+0

向我們展示您自己未開發的實際異步代碼,並且我們可以展示真實的答案。如果沒有這些,我們所能做的只是猜測,任何「投票」響應都是醜陋的,低效的做事方式。我們需要看到實際的代碼,以便提出可靠的建議或正確的做法。 – jfriend00

回答

3

不是這樣的。

您可以編寫一個包裝函數,該函數返回一個承諾,直到獲得結果爲止。

承諾然後會調用您沒有重複寫入的函數(例如,使用setInterval),直到它返回一個值,然後通過它來解析。

function wrap_function() { 
    return new Promise(function (resolve, reject) { 
     var interval = setInterval(function() { 
      var result = the_origional_function(); 
      if (result) { 
       clearInterval(interval); 
       resolve(result); 
      } 
     }, 2000); 
    }); 
} 

(假設我解釋的聲明「在幾秒鐘)這個函數會返回一個值」

+0

@GlassMan - 不要這樣做。這不是解決這個問題的正確方法。當您向我們展示其中包含異步操作的實際代碼時,我們可以提供解決此問題的好方法。異步黑客是一團糟。不要使用它們。爲了製作可靠,可維護的代碼,學會以正確的方式解決異步問題,而不要使用黑客技術。如果需要以正確的方式解決問題,請修改項目中其他人的代碼。 – jfriend00