用乙個小例子,來分析nodejs的非同步呼叫的順序

2021-07-11 16:23:52 字數 1027 閱讀 9830

通過同步和非同步的對比,我們來看下nodejs是如何處理一些非同步呼叫的。

下面是nodejs**:

'use strict';

const fs = require('fs');

// 模擬非同步

console.time('setout');

settimeout(function

(),0);

setimmediate(function

())process.nexttick(function

())// 用於阻塞主線程

for(var i=0;i<10000000;i++){}

console.log('for迴圈之後');

// 非同步讀取檔案

fs.readfile('./1.txt','utf8',function

(err,data)

fs.writefile('./11.txt',data,'utf8',function

(err)

console.log('非同步讀取完成');

})})// 同步讀取檔案

fs.readfilesync('./1.txt');

console.log('同步讀取檔案結束');

其執行結果是:

for迴圈之後

同步讀取檔案結束

process.nexttick

setout: 15.483ms

setimmediate

非同步讀取完成

總結:

雖然**是從上到下依次執行,但是遇到有非同步操作的時候,就會把非同步操作放入事件佇列中進行事件迴圈。同步操作會在主線程上進行,雖然同步讀取檔案被放到了**的最後,但是從結果看還是提前執行。

同時,非同步中的process.nexttick()操作,優先順序最高,它會優先被執行。

用小例子來解釋svn switch的使用

svn switch 的作用,不大好講清楚。用語言描述起來是 switch命令只是update命令的乙個超集。svn switch和svn update兩個命令唯一區別就是update會一直比較同一路徑。換名話說,update通過時間移動你的工作拷貝,switch通過時間和空間移動工作拷貝。本文的例...

用乙個簡單的例子來理解python高階函式

用乙個簡單的例子來理解python高階函式 最近在用mailx傳送郵件,寫法大致如下.echo body mailx s title a corp.com,b corp.com 不知什麼原因,在一台機器上只要mailto中包含空格,郵件就傳送不出去.所以需要對收件人做規範化處理,即去除空格,去除多餘...

override與new 用兩個小例子來解釋

例一 class program public class a5 public virtual void methodb public class b5 a5 例二 class a public virtual void aa class b a public override void aa 將這...