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提出的回调函数,但我确信本页上的其他选项也是很好的解决方案。我也建议回调,但确实如此。很高兴你成功了。我希望我能将所有答案都标记为正确答案,但我发现我不能。因此我将投票决定它是否有用。非常感谢你的努力。