javascript中函数的执行顺序

javascript中函数的执行顺序,javascript,node.js,Javascript,Node.js,在学习node.js的过程中,我遇到了一个产生奇怪结果的例子。代码如下: /* 01 */ var zlib = require("zlib"); /* 02 */ var input = '...............text...............'; /* 03 */ zlib.deflate(input, function(err, buffer) { /* 04 */ if (!err) { /* 05 */ console.log("deflate (%

在学习node.js的过程中,我遇到了一个产生奇怪结果的例子。代码如下:

/* 01 */  var zlib = require("zlib");
/* 02 */  var input = '...............text...............';
/* 03 */  zlib.deflate(input, function(err, buffer) {
/* 04 */    if (!err) {
/* 05 */      console.log("deflate (%s): ", buffer.length,buffer.toString('base64'));
/* 06 */      zlib.inflate(buffer, function(err, buffer) {
/* 07 */        if (!err) {
/* 08 */          console.log("inflate (%s): ", buffer.length, buffer.toString());
/* 09 */        }
/* 10 */      });
/* 11 */      zlib.unzip(buffer, function(err, buffer) {
/* 12 */        if (!err) {
/* 13 */          console.log("unzip deflate (%s): ", buffer.length, buffer.toString());
/* 14 */        }
/* 15 */      });
/* 16 */    }
/* 17 */  });
/* 18 */ 
/* 19 */  zlib.deflateRaw(input, function(err, buffer) {
/* 20 */    if (!err) {
/* 21 */      console.log("deflateRaw (%s): ", buffer.length, buffer.toString('base64'));
/* 22 */      zlib.inflateRaw(buffer, function(err, buffer) {
/* 23 */        if (!err) {
/* 24 */          console.log("inflateRaw (%s): ", buffer.length, buffer.toString());
/* 25 */        }
/* 26 */      });
/* 27 */    }
/* 28 */  });
/* 29 */ 
/* 30 */  zlib.gzip(input, function(err, buffer) {
/* 31 */    if (!err) {
/* 32 */      console.log("gzip (%s): ", buffer.length, buffer.toString('base64'));
/* 33 */      zlib.gunzip(buffer, function(err, buffer) {
/* 34 */        if (!err) {
/* 35 */          console.log("gunzip (%s): ", buffer.length, buffer.toString());
/* 36 */        }
/* 37 */      });
/* 38 */      zlib.unzip(buffer, function(err, buffer) {
/* 39 */        if (!err) {
/* 40 */          console.log("unzip gzip (%s): ", buffer.length, buffer.toString());
/* 41 */        }
/* 42 */      });
/* 43 */    }
/* 44 */  });
我预计将产生以下结果:

deflate (18) : ...some thing strange !... inflate (34) :............text............. unzip deflate (34) :............text............. deflateRaw (12) :...some thing strange !... inflateRaw34() :............text............. gzip (30) :...some thing strange !... gunzip(34) :............text............. unzip gzip (34) :............text............. 泄气(18):…有些奇怪的事情!。。。 充气(34):……文本。。。。。。。。。。。。。 解压放气(34):……文本。。。。。。。。。。。。。 德雷特拉夫(12):…有些奇怪的事情!。。。 充气式W34():……文本。。。。。。。。。。。。。 gzip(30):…有些奇怪的事情!。。。 gunzip(34):……文本。。。。。。。。。。。。。 解压缩gzip(34):……文本。。。。。。。。。。。。。 但我遇到了这样的情况:


那么,如果函数的执行顺序与调用顺序不一致,那么函数的执行顺序是什么呢?

异步函数不会等到其回调被调用。它不会阻止执行过程。你得到的流量是正确的。为了确保事情完全按照您需要的顺序进行,可以将它们放入回调函数中,或者使用async/await。这意味着,在顶层,您将只有
zlib.deflate
调用,然后是地狱般的连续回调,每个函数调用一个函数,每个函数中包含一个调用。函数总是按照调用顺序执行。调用函数意味着执行它。你对调用函数的时间感到困惑,而这通常不是它们被写下来的顺序。+Rishat Muhametshin你的意思是调用的顺序和我写的一样,但完成的顺序和图像一样?例如,在deflateRaw之前调用inflate,但在deflateRaw之前完成?这可能是因为减压任务的强度更大?是吗?异步函数不会等到它的回调被调用。它不会阻止执行过程。你得到的流量是正确的。为了确保事情完全按照您需要的顺序进行,可以将它们放入回调函数中,或者使用async/await。这意味着,在顶层,您将只有
zlib.deflate
调用,然后是地狱般的连续回调,每个函数调用一个函数,每个函数中包含一个调用。函数总是按照调用顺序执行。调用函数意味着执行它。你对调用函数的时间感到困惑,而这通常不是它们被写下来的顺序。+Rishat Muhametshin你的意思是调用的顺序和我写的一样,但完成的顺序和图像一样?例如,在deflateRaw之前调用inflate,但在deflateRaw之前完成?这可能是因为减压任务的强度更大?是这样吗?