2014-03-04 234 views
1

我有三個JavaScript文件1.js,2.js,3.jsJavaScript函數執行同步

1.js

function getOne() 
{ 
return "one"; 
} 

2.js

function getTwo() 
{ 
return "two"; 
} 

3.js

getOne(function(resp1) 
{ 
console.log(resp1) 
getTwo(function(resp2) 
{ 
console.log(resp2); 
} 

}); 

3.js中的函數調用不是exe完全沒有問題。我加載JS文件的順序 1.js 2.js 3.js

可能有人請幫助

+2

'getOne'不帶參數。你怎麼可能期望你傳遞給他們的回調被稱爲? –

回答

3

如前所述,它不起作用的原因是您的方法不處理您作爲參數傳入的回調。

要使其工作像你想你需要重寫你的方法是這樣的:

function getOne(callback) 
{ 
    callback("one"); 
} 

function getTwo(callback) 
{ 
    callback("two"); 
} 

既然你的問題是關於函數執行同步不過,你不妨往下走另一條道路。

你正在做的事情對於一些函數可以正常工作,但是當你想要同步許多函數的時候,你最終會以pyramid of doom的代碼向右行進,而不是向前行進。

step1(function (value1) { 
    step2(value1, function(value2) { 
     step3(value2, function(value3) { 
      step4(value3, function(value4) { 
       ...continue ad nauseum 
      }); 
     }); 
    }); 
}); 

在你可能想看看futures and promises

您可以在JavaScript這裏閱讀更多關於承諾的模式的話:

http://www.html5rocks.com/en/tutorials/es6/promises/

0

代碼:

getOne(function(resp1) 
    { 
     console.log(resp1) 
     getTwo(function(resp2) 
     { 
     console.log(resp2); 
     } 
    } 
); 

事實上確實通話getOne,但它傳遞一個匿名函數作爲參數。 getOne實際上並不採取任何參數(雖然傳遞了一個不痛,也沒有引起任何錯誤),也不是匿名函數實際上執行任何地方。

我不知道你想要做什麼,但我會通過給getOne參數啓動:

function getOne(fnFoo) 
{ 
    return "one"; 
} 

你最好再能叫你傳遞給函數:

function getOne(fnFoo) 
{ 
    fnFoo(); 
    return "one"; 
} 
+0

不知道爲什麼下投票,但也許我錯過了什麼代碼試圖做的要點。 –