javascript中函数的执行顺序
在学习node.js的过程中,我遇到了一个产生奇怪结果的例子。代码如下: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 (%
/* 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之前完成?这可能是因为减压任务的强度更大?是这样吗?