我写了很长的代码,试图通过这种简单的代码以简单的形式复制情况。
我想做的是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
答案 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();