假设某人实现了另一个setTimeout函数:
const setTimeout = (func, ms) => {
const future = Date.now() + ms;
while (Date.now() < future) {
// do nothing
}
func();
};
(为简单起见,其中的哪个)接口与原始接口几乎相同。 作为开发人员,我如何才能验证它没有初始化任何异步代码?
我想知道在使用setTimeout
调用之后我的程序是否存在。
如果setTimeout
是使用同步代码实现的,则该程序将(不久)存在。
如果setTimeout
的实现是异步的,则该程序仅在异步代码完成后才存在。
更具体地说,我可以这样做吗?
setTimeout(()=>{},1000);
const isAnyAsyncCodeWillRun = ...;
if(isAnyAsyncCodeWillRun){
console.log('Program wont exist right now, only in about 1000ms');
} else {
console.log('Program will exist now');
}
答案 0 :(得分:2)
是的,术语“异步”表示该函数在完成其工作之前返回,并且在提供回调时将在以后调用该函数。所以你可以使用
let done = false;
let returned = false;
unknownFunction(() => {
done = true;
if (returned) console.log("callback is getting called asynchronously");
});
returned = true;
if (done) console.log("callback was called synchronously");
当然,您不能同步确定该函数以后是否会异步执行某些操作(除非您的环境为此提供了特殊的挂钩)。