Javascript 如何在调用下一个函数之前等待函数完成?

Javascript 如何在调用下一个函数之前等待函数完成?,javascript,jquery,html,Javascript,Jquery,Html,在调用下一个函数之前,等待函数完成的最佳方法是什么 我有一个场景,两个函数被连续调用,一个接一个。我需要在调用第二个之前完成第一个 Function1(); Function2(); 在尝试Function2之前,如何让代码等待Function1完成 WebDevelopment:解决方案可以是javascript、jQuery或基于Ajax的 谢谢 除了一个非常简单的例子之外,你可以用很多方法 function first(){ // define every thing

在调用下一个函数之前,等待函数完成的最佳方法是什么

我有一个场景,两个函数被连续调用,一个接一个。我需要在调用第二个之前完成第一个

Function1();   
Function2();   
在尝试
Function2
之前,如何让代码等待
Function1
完成

WebDevelopment:解决方案可以是javascript、jQuery或基于Ajax的


谢谢

除了一个非常简单的例子之外,你可以用很多方法

function first(){



// define every thing here and then at the end call your second function



function2();


}

签出更多的可能性

如果您在浏览器中,只需使用回调,这是最简单的跨浏览器方式

例如:

function sayBill() {
   console.log('bill');
}

function sayHiAfterTwoSeconds(callback) {

  setTimeout(function() {
     console.log('hi');

     // call the function you passed in parameter
     if (typeof callback === 'function') {
        callback();
     }
  });

}

sayHiAfterTwoSeconds(sayBill);
// will output 'bill hi'

如果您希望以更好的方式完成,但不是跨浏览器,则有以下承诺:


或者更现代但不受支持的ATM异步等待:

您可以使用
承诺
回调
来解决此问题,承诺是更现代、更干净的方式:

承诺:

function foo() {
   return new Promise(function(resolve, reject) {
      // do some work
      resolve(optionalParam);
      // something caused an error whoops
      reject(optionalParam);
   })
}

function bar() {
    // do something
};

// Call bar only once foo finishes
foo().then(function() {
   bar();
}, function() {
   // this is the reject case an error here
});
承诺可以被链接,这意味着如果bar是一个承诺,我们可以将另一个
事件链接到它

您还可以使用回调来解决您的问题

function foo(cb) {
   var data = 'alex';
   cb(data);
}

function bar(name) {
   // some processing
   console.log(name);
}

// Call foo, then execute bar when foo finishes
foo(function(data) {
    bar(data);  // alex would be logged once the callback fires
});
在这里的回调示例中,我们将函数作为参数传递,一旦运行的函数块遇到您对cb参数的调用,它将调用模拟异步的函数。但请记住,它不会停止该函数上的执行上下文。如果我们有这样的代码:

function foo(cb) {
    var data = 'alex';
    cb(data);
    console.log('this is after so don't print it'); <-- still prints
};
函数foo(cb){
var数据='alex';
cb(数据);

控制台。日志(“这是在之后不打印它”),它取决于第一个函数中发生了什么。如果没有异步,那么它将隐式发生,否则,考虑使用约定。无论如何,是代码>函数()/<代码>执行异步操作(例如Ajax调用)。你能在Function1中调用Function2吗?有很多方法。尝试使用Promise你需要向我们展示
Function1
中的代码。感谢所有做出积极贡献的人,我将尝试其中一些最适合我的建议。我决定使用@Gatsbill提出的回调函数,但我确信本页上的其他选项也是很好的解决方案。我也建议回调,但确实如此。很高兴你成功了。我希望我能将所有答案都标记为正确答案,但我发现我不能。因此我将投票决定它是否有用。非常感谢你的努力。