Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在一个函数完成后调用另一个函数?_Javascript_Node.js_Callback - Fatal编程技术网

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是这样吗?请你从头再看一遍这个问题,你的答案对我来说很有希望,但你改变了函数的字母名称,这让我很困惑你想做什么?