Javascript 如何在一个函数完成后调用另一个函数?
我已经写了很长的代码,试图通过这个简单的代码以简单的形式复制这种情况 我想做的是在Javascript 如何在一个函数完成后调用另一个函数?,javascript,node.js,callback,Javascript,Node.js,Callback,我已经写了很长的代码,试图通过这个简单的代码以简单的形式复制这种情况 我想做的是在函数A()完成后,调用函数B()。 我正在尝试使用callback函数,但在本例中,B提前触发。 请建议如何编写此回调或任何其他方法 function A(callback){ a() function a() { setTimeout(aa,1000) function aa(){ console.log("in aa")
函数A()
完成后,调用函数B()
。
我正在尝试使用callback
函数,但在本例中,B
提前触发。
请建议如何编写此回调
或任何其他方法
function A(callback){
a()
function a() {
setTimeout(aa,1000)
function aa(){
console.log("in aa")
}
}
b()
function b() {
setTimeout(bb,100)
function bb(){
console.log("in bb")
}
}
c()
function c(){
setTimeout(cc,50)
function cc(){
console.log("in cc")
}
}
callback();
}
function B() {
console.log("in B");
}
A(B)
output
in B
in cc
in bb
in aa
如果希望在超时结束后运行回调,则必须在超时结束后调用回调 这意味着它需要位于传递给
setTimeout
的函数的末尾
使用当前代码,设置超时的倒计时,然后立即调用回调
函数一(回调){
控制台日志(1);
函数二(){
控制台日志(2);
回调();
}
setTimeout(两个,250);
}
职能三(){
控制台日志(3);
}
一(三)代码>本质上,这里发生的事情(按照您的要求)是您希望B在A完成后运行
不需要使用“B”作为回调,使用async/await
B将等到A完成后再调用
const b=()=>{
返回新承诺((解决、拒绝)=>{
setTimeout(()=>{resolve(“B done”)},1000);
});
}
常数c=()=>{
返回新承诺((解决、拒绝)=>{
setTimeout(()=>{resolve(“C done”)},500;
});
}
常量A=async()=>{
const-bres=等待b();
控制台日志(bres);
const cres=等待c();
控制台日志(cres);
};
常量B=async()=>{
控制台日志(“完成”);
}
const app=async()=>{
等待一个();
等待B();
};
app()
或者使用承诺
,或者在上一个函数的超时时间内调用下一个函数。更多关于这里的承诺:使用setTimeout意味着您的代码将在调用堆栈清除后执行…无论您设置了多少毫秒…它将在稍后执行…因此您的callback()将立即放入调用堆栈并被调用。现在我将setTimeout设置为5秒,它工作正常,但事情是这样的(我不确定)如果服务器变得繁忙,那么这个程序就会崩溃,这就是为什么要在回调方面寻找合适的解决方案etc@ErDeepakGarg-设置超时的具体时间并不重要。“是否有服务器将变忙”?您的问题中没有涉及服务器。它是纯客户端JS。听起来您有一个XY问题,但在这里问了一个错误的问题。主要项目是1000行代码…所以我试图简单地表达我的结巴。在这个问题中,我只想知道在完成A()之后如何运行B()完全。@ErDeepakGarg-没有神奇的方法可以检测由A启动的每个异步函数何时完成。您需要编写代码来显式处理它。(将异步函数设计为使用承诺,并使用承诺组合它们。所有这些都可以使这更容易).我不明白你做了什么,我想你改变了整个问题。我想知道当A()函数结束后B()会运行吗?@ErDeepakGarg是这样吗?请你从头再看一遍这个问题,你的答案对我来说很有希望,但你改变了函数的字母名称,这让我很困惑你想做什么?