当我尝试将头绕在异步编程上时,我感到有些不适。每个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问题,但是理解异步编程是基础知识,并且我阅读了许多文档,并且以某种方式错过了这一重要部分:为什么以及何时(在何种情况下)异步代码是非-阻止?
我希望答案是解释性的或解释性的。