Javascript函数执行同步

时间:2014-03-04 22:48:06

标签: javascript function synchronization

我有三个javascript文件1.js,2.js,3.js

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中的函数调用根本不会执行。我按顺序加载js文件 1.js 2.js 3.js

请某人帮忙

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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";
}