如何实现此代码以正确的顺序(A和B)运行而不用仅使用回调更改setTime?
function a() {
setTimeout(function () {
console.log('a');
},1000);
}
function b() {
console.log('b');
}
function c() {
a();
b();
}
c();
当运行c()时,我需要以同步顺序运行a()和b(),即:
答案 0 :(得分:3)
您提到使用回调 - 只需向a()
添加一个参数,该参数是您在执行console.log(a)
后调用的回调函数,然后当您调用a()
时将参考传递给b
:
function a(callback) {
setTimeout(function () {
console.log('a');
if (typeof callback === 'function')
callback();
},1000);
}
function b() {
console.log('b');
}
a(b); // note: no parentheses after b, i.e., a(b), *not* a(b())
a(); // note: a() still works without any argument

a()
内的测试检查callback
实际上是对函数的引用意味着您可以选择不传递回调,a()
仍然有效。
答案 1 :(得分:1)
异步操作(setTimeout()
中正在进行的操作)需要回调才能在完成时调用。将回调提供给a()
:
function a(callback) {
setTimeout(function () {
console.log('a');
if (typeof callback === "function") {
callback();
}
},1000);
}
然后为该回调传递b
的引用:
function c() {
a(b);
}