if语句在回调之前会执行同步吗?

时间:2016-02-25 15:21:25

标签: node.js asynchronous

在进行异步函数调用之前,我必须更改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"});
            }
        });
    });
}

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

1 个答案:

答案 0 :(得分:2)

看起来对我来说。

假设get_only_valid_elements_jsonupdate_something在完成工作时调用传递给他们的函数,这就是它的执行方式:

  1. 调用get_only_valid_elements_jsonfirst_function函数返回
  2. get_only_valid_elements_json完成时(即当它调用第二个参数中传递的回调函数时),它将执行if语句,并有条件地执行其块
  3. 然后,update_something被调用,然后function(valid_json) {...}返回
  4. update_something完成时(即调用回调函数),它将执行if (error)语句和相应的块
  5. 调用callback函数(错误或成功),表明get_only_valid_elements_json完成了工作
  6. 因此,在“真正的工作”完成之前,这些功能会同步返回。

    异步调用的原因是在等待某些事情时不阻止执行过程,例如:对AJAX呼叫的响应。您只需告诉浏览器在收到响应时执行给定的函数,因此当它收到响应时,它会调用您给AJAX调用的函数,该函数调用赋给update_something的函数,然后调用{ {1}} callback