1

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

我想要做的是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
4

2 回答 2

1

如果您希望您的回调在超时完成后运行,那么您必须在超时完成时调用它。

这意味着它需要位于您传递给的函数的末尾setTimeout

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

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

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

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

one(three);

于 2018-08-23T15:27:39.493 回答
0

本质上,这里发生的事情(如您所要求的)是您希望 B 在 A 完成后运行。

无需使用“B”作为回调,使用 async/await。

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();

于 2018-08-23T15:31:23.467 回答