一个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_json
和update_something
在完成作业时调用传递给它们的函数,这是如何执行的:
- 它调用
get_only_valid_elements_json
,并返回first_function
函数 - 当
get_only_valid_elements_json
完成时(即它调用在第二个参数中传递的callback函数时),它将执行if
语句,并有条件地将其块 - 然后,
update_something
,然后function(valid_json) {...}
返回 - 当
update_something
完成(即调用callback函数)时,它将执行if (error)
语句和相应的块 -
callback
函数(错误或成功),表示get_only_valid_elements_json
完成其作业
所以这些function在“真正的工作”完成之前同步返回。
asynchronous调用的原因是在等待某些事情时不阻止正在执行的进程,例如响应AJAX调用。 你只要告诉浏览器在接收到响应的时候执行一个给定的函数,所以当它接收到响应时,它会调用你给AJAX调用的函数,该函数调用给update_something
的函数,然后调用给first_function
的callback
first_function
。