2015-10-12 38 views
0

我有一個html文件,其中包含2個js。該first.js具有的getJSON呼叫和如以下回調函數,以它:Javascript - 在回調完成前執行下一行

finalResult = "" 
callbackfunction = function(result){ 
    finalResult = some manipulation with result 
} 
getJSON (url, callbackfunction) 

的second.js使用數據「finalResult」 first.js的。類似下面:

ultimateResult = some manipulation with finalResult 

問題:該生產線是調用回調函數之前ultimateResult被執行,因此second.js總是讀finalResult爲空值。

我嘗試設置ajax asynch變量爲false之前進行json調用 - > Dint幫助 我試圖包括first.js腳本在second.js執行它在最終腳本行前 - > Dint幫助 我無法在first.js的回調中包含second.js ultimateResult腳本 - >這不是我的選項

我可以在性能上妥協,其中ultimateResult可以等待回調完成,但我不確定我如何實現它。程序循環,如果我嘗試使用一些標誌,而條件(當然)。

謝謝!

+0

從回調中調用ultimateResult? – user2182349

+0

感謝您的回覆。不幸的是,這不是我的選擇,我在描述中提到了這一點:) –

回答

0

所以,你必須:

HTML:

<script src="first.js"></script> 
<script src="second.js"></script> 

first.js:

var finalResult = ''; 
var callBackFunction = function(result) { 
    finalResult = codeManipulation(); 
} 
getJson(url, callBackFunction); 

second.js:

function ultimateResult(result) { 
    console.log(result); 
} 
ultimateResult(finalResult); 

//OUTPUTS EMPTY STRING 
  • 你可以使用promise而不是回調。這是推薦的方法
  • 當返回值爲ultimateResult的值時,您可以觸發事件
  • 您可以初步將finalResult的值設置爲undefined,並檢查值一個遞歸循環直到它被定義。
  • 非常糟糕的想法,不要這樣做:放一個超時調用ultimateResult。這很糟糕,因爲如果在API之前回調你正在浪費時間。當調用需要比預期更長的時間時,情況會更糟,因爲如果在被調用時沒有返回值,該值將作爲空字符串返回。
相關問題