JS-回调不是异步的



我是JS的学生,所以我对这个新手问题感到抱歉。我有下面的代码,它不是异步运行的。

let var1 = 0
function fn2(){
setTimeout(()=>{var1 = 3},5000)
}
function fn1(callback){
try{
callback
}catch(error){
console.log(error)
}
console.log(1+var1)
}
fn1(fn2)

我这样做是为了让你们更容易理解。IRL-fn2是一个API。

此处的返回应为4但正在返回1

我知道这是基本的,我真的很抱歉。我理解回调的作用,但我没有理解它的语法。

编辑:对不起,伙计们,我想我的问题不够清楚,所以我会补充一句——";有什么办法让它发挥作用吗"太引人注目了。

要在setTimeout之后执行console.log,您需要向fn2添加一个回调,以便在setTimeout中调用

let var1 = 0
function fn2(callback) {
setTimeout(() => {
var1 = 3;
callback();
}, 5000)
}
function fn1(callback) {
try {
callback(() => {
console.log('asynch', 1 + var1)
});
} catch (error) {
console.log(error)
}
console.log('synch', 1 + var1)
}
fn1(fn2)

或者,您可以在fn2中使用Promises,在fn1中使用async/await,例如…

let var1 = 0
function fn2() {
return new Promise((resolve) => {
setTimeout(() => {
var1 = 3;
resolve();
}, 5000);
});
}
async function fn1(callback) {
try {
await callback();
} catch (error) {
console.log(error)
}
console.log(1 + var1)
}
fn1(fn2)

以防万一很难理解Jaromanda的说明:(下面是一个工作示例。通过练习,一切都变得容易起来。祝你好运:(

let var1 = 0
function fn2(){
setTimeout(()=>{
console.log('Setting var1 = 3');
var1 = 3;
console.log('adding 1 to var1. Result = ', 1 + var1);
},5000)
}
function fn1(callback){
try{
callback()
}catch(error){
console.log(error)
}
console.log(1 + var1)
}
fn1(fn2)

最新更新