在进行异步函数调用之前,我必须更改json元素的值,如果它存在,但是我不确定此代码是否会按照我想要的顺序执行。这是一个简单的例子:
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"});
}
});
});
}
我想知道如何以下代码将执行,更重要的是为什么。谢谢!
答案 0 :(得分:2)
看起来对我来说。
假设get_only_valid_elements_json
和update_something
在完成工作时调用传递给他们的函数,这就是它的执行方式:
get_only_valid_elements_json
,first_function
函数返回get_only_valid_elements_json
完成时(即当它调用第二个参数中传递的回调函数时),它将执行if
语句,并有条件地执行其块update_something
被调用,然后function(valid_json) {...}
返回update_something
完成时(即调用回调函数),它将执行if (error)
语句和相应的块callback
函数(错误或成功),表明get_only_valid_elements_json
完成了工作因此,在“真正的工作”完成之前,这些功能会同步返回。
异步调用的原因是在等待某些事情时不阻止执行过程,例如:对AJAX呼叫的响应。您只需告诉浏览器在收到响应时执行给定的函数,因此当它收到响应时,它会调用您给AJAX调用的函数,该函数调用赋给update_something
的函数,然后调用{ {1}} callback
。