JS - 回调不是异步的

JS - Callback is not being asynchronous

我是一名 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.

这里的return应该是 4 但是 returning 1

我知道这是基本的 - 对此我真的很抱歉。 我了解回调的用途 - 但这是我没有得到的语法。

编辑:对不起,伙计们,我想我的问题不够清楚,所以我要补充——“有什么办法让它起作用吗?” 太受关注了。

以防万一很难理解 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)

要在 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)