一个功能完成后如何调用另一个功能?

时间:2018-08-23 15:19:54

标签: javascript node.js callback

我写了很长的代码,试图通过这种简单的代码以简单的形式复制情况。

我想做的是function A()完成后,打电话给function B()。 我正在尝试使用callback函数,但是在这种情况下,B提前触发了。 请提出如何编写此callback或任何其他方法的建议?

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

2 个答案:

答案 0 :(得分:1)

如果您希望在超时结束后运行回调,则必须在结束结束时调用它。

这意味着它必须位于传递给setTimeout的函数的末尾。

使用当前代码,您要设置超时的倒计时,然后立即调用回调。

function one(callback) {
  console.log(1);

  function two() {
    console.log(2);
    callback();
  }
  setTimeout(two, 250);
}

function three() {
  console.log(3);
}

one(three);

答案 1 :(得分:0)

本质上,此处发生的情况(根据您的请求)是您希望B在A完成之后运行。

在异步/等待状态下,无需将“ B”用作回调。

B会等到A完成后再调用。

const b = () => {
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{resolve("B done")}, 1000);
  });
}
const c = () => {
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{resolve("C done")}, 500);
  });
}

const A = async () => {
  const bres = await b();
  console.log(bres);
  const cres = await c();
  console.log(cres);
};

const B = async () => {
  console.log("done");
}

const app = async() => {
  await A();
  await B();
};

app();