您好,我有两个名为function_1和function_2的函数。仅当function_1完成后,才应开始执行function_2。.仅在使用es6语法完成function_1之后,才能调用function_2吗?
下面是代码,
this.function_1();
this.function_2();// this should be called soon after function_1 is done
我尝试过的
this.function_1(()=> {
this.function_2();}
);
但是以上方法似乎无效。有人可以帮我解决这个问题。谢谢。
答案 0 :(得分:2)
在其他条件相同的情况下,您需要的第一个代码块就是
this.function_1();
this.function_2();
现在,function_1
可能会触发一些异步操作,因此在技术上 完成function_1
后发生事情。
如果要在所有这些操作完成后运行function_2
,则function_1
必须明确提供一种允许的机制。
传统方法是让function_1
接受回调,这种情况将可行:
this.function_1(()=> {
this.function_2();
});
现代方法是让function_1
返回承诺,在这种情况下将可行:
this.function_1()
.then(()=> {
this.function_2();
});
MDN有detailed information about Promises。
它还允许您使用await
语法提供,使您处于使用async
关键字声明的函数中。
async function myFunction() {
await this.function_1();
this.function_2();
}
最后,重复我先前的强调点:function_1
必须显式启用这两种方法中的任一种。
答案 1 :(得分:1)
您可以使用Promise,此外,您还可以使用async await
function f1 () {
return new Promise(res => setTimeout(() => res(console.log('f1')), 1000));
}
function f2() {
console.log('f2');
}
async function f3() {
await f1();
f2();
}
f1().then(f2);
// or with async await syntax
f3();
答案 2 :(得分:0)
考虑function_1会执行一些异步操作。您可以使用简单的回调来实现。
您可以将function_2作为回调传递给function_1。 它告诉function_1,一旦完成执行,就应该调用execute回调函数。
检查一下。
function function_1(callback) {
console.log('function_1');
// Do some time consuming action.
// Below setTimeout is just for demo purpose
setTimeout(function() {
callback();
}, 1000)
}
function function_2() {
console.log('function_2');
}
function_1(function_2);