一个if语句将在callback之前执行同步?

我不得不改变一个json元素的值, 如果它存在 ,在进行asynchronous函数调用之前,但我不知道这个代码是否会按我想要的顺序执行。 这是一个简单的例子:

function first_function(json, callback) { get_only_valid_elements_json(json, function(valid_json) { if (valid_json.element) { valid_json.element = something; } update_something(valid_json, function(error) { if (error) { return callback(error); } else { return callback({success:"YAY"}); } }); }); } 

我想知道下面的代码将如何执行,更重要的是为什么 。 谢谢!

它看起来是对的我。

假设get_only_valid_elements_jsonupdate_something在完成作业时调用传递给它们的函数,这是如何执行的:

  1. 它调用get_only_valid_elements_json ,并返回first_function函数
  2. get_only_valid_elements_json完成时(即它调用在第二个参数中传递的callback函数时),它将执行if语句,并有条件地将其块
  3. 然后, update_something ,然后function(valid_json) {...}返回
  4. update_something完成(即调用callback函数)时,它将执行if (error)语句和相应的块
  5. callback函数(错误或成功),表示get_only_valid_elements_json完成其作业

所以这些function在“真正的工作”完成之前同步返回。

asynchronous调用的原因是在等待某些事情时不阻止正在执行的进程,例如响应AJAX调用。 你只要告诉浏览器在接收到响应的时候执行一个给定的函数,所以当它接收到响应时,它会调用你给AJAX调用的函数,该函数调用给update_something的函数,然后调用给first_functioncallback first_function