2014-03-04 55 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

不知道为什么下投票,但也许我错过了什么代码试图做的要点。 –