为什么以及何时异步代码是非阻塞的?

时间:2018-09-18 10:57:30

标签: javascript asynchronous

当我尝试将头绕在异步编程上时,我感到有些不适。每个JavaScript教程都说like

  

每次发生昂贵的操作时,我们都会传递一个回调函数,一旦我们可以继续进行处理,该函数将被调用。在继续执行该程序的其余部分之前,我们不会等待完成。

我怎么看,当我们执行一些命令时,我们需要下一个命令的代码结果。那么,当我们在程序的其余部分中需要异步调用的结果时,异步调用又如何不阻止执行呢?

例如这样的简单代码:

var a = 12;
var c = 0;

function sum( data ) {
  console.log( data.b + a );
  c = data.b + a // global c here
  console.log( 'and now we can continue with next command' );
}

verySlowAndExpensiveAsyncCall( a, sum ); 
console.log( 'can we execute this without waiting previous to finish?' );
console.log( c );

就我的程序思维而言,我觉得我无论如何都无法执行任何下一个命令,因为我需要c的值才能继续。那么这里的非阻塞性质在哪里?

我的问题可能不是严格的Stack Overflow问题,但是理解异步编程是基础知识,并且我阅读了许多文档,并且以某种方式错过了这一重要部分:为什么以及何时(在何种情况下)异步代码是非-阻止?

我希望答案是解释性的或解释性的。

0 个答案:

没有答案