91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

node同步與異步的區別有哪些

發布時間:2022-04-19 17:34:26 來源:億速云 閱讀:272 作者:zzz 欄目:web開發

這篇“node同步與異步的區別有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“node同步與異步的區別有哪些”文章吧。

node同步與異步的區別是:同步就是程序自上而下的運行,上一步執行完后下一步才能得到執行;而異步是指不用等待上面的運行完后再運行下面的操作,異步編程可以依托于回調來實現,但并不是回調后的程序就是異步了。

本教程操作環境:windows10系統、nodejs 12.19.0版本、Dell G3電腦。

node同步與異步的區別是什么

同步就是程序自上而下運行,而異步就是不用等待上面的運行完后再運行下面的操作。異步編程依托于回調來實現,但不能說使用了回調后程序就異步化了。

同步的英文:sync(synchronization)

異步的英文:async(asynchronous)

同步API:只有當前API執行完成后,才能繼續執行下一個API

console.log('before'); 
console.log('after');

異步API:當前API的執行不會阻塞后續代碼的執行

console.log('before');
setTimeout(
   () => { console.log('last');
}, 2000);
console.log('after');

同步API, 異步API的區別( 獲取返回值 )

同步API可以從返回值中拿到API執行的結果, 但是異步API是不可以的(好像在異步API里面寫return也是拿不到結果的?)

// 異步
  function getMsg () { 
      setTimeout(function () { 
          return { msg: 'Hello Node.js' }
      }, 2000);
  }
  const msg = getMsg (); //函數沒有寫return 默認是返回 undefined
cnsole.log(msg); // 輸出的是 undefined,因為定時器還沒執行完就執行了輸出

回調函數

自己定義函數讓別人去調用。

// getData函數定義
 function getData (callback) {}
  // getData函數調用
 getData (() => {});
/*例子------------------*/
function getMsg (callback) {
    setTimeout(function () {
        callback ({ msg: 'Hello Node.js' })
    }, 2000);
}
getMsg (function (msg) { 
    console.log(msg);
});

同步API, 異步API的區別(代碼執行順序)

同步API從上到下依次執行,前面代碼會阻塞后面代碼的執行

異步API不會等待API執行完成后再向下執行代碼

代碼執行順序分析

JavaScript分為同步代碼執行區和異步代碼執行區,它們之間有回調函數隊列連接。首先,JavaScript會執行同步代碼區的全部內容,然后再去異步代碼區執行代碼,查找異步代碼區執行完成的代碼塊,找到就馬上去找到這個異步代碼塊對應的回調函數放到同步代碼執行區來執行

Node.js中的異步API

讀取文件API,有回調函數。

事件監聽的API,也有回調函數。(事件處理函數就是回調函數,事件監聽API就是異步API)

如果異步API后面代碼的執行依賴當前異步API的執行結果,但實際上后續代碼在執行的時候異步API還沒有返回結果,這個問題要怎么解決呢?

比如有個需求:依次讀取A文件、B文件、C文件(讀完A再讀B接著讀C,不能同時讀取)

如果實現上面這個需求就會導致將B讀取的操作放到A的回調函數里面,而讀取C的操作放到B的回調函數里面,導致嵌套層次很多(回調地獄)

const fs = require('fs');
fs.readFile('./1.txt', 'utf8', (err, result1) => {
console.log(result1)
fs.readFile('./2.txt', 'utf8', (err, result2) => {
console.log(result2)
fs.readFile('./3.txt', 'utf8', (err, result3) => {
console.log(result3)
})
})
});

以上就是關于“node同步與異步的區別有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

都江堰市| 阆中市| 晋州市| 广水市| 叙永县| 弋阳县| 海丰县| 二连浩特市| 北票市| 新晃| 聊城市| 葫芦岛市| 荆州市| 留坝县| 舟山市| 利川市| 岳普湖县| 额尔古纳市| 赤城县| 武城县| 元谋县| 卢龙县| 屯留县| 廊坊市| 祁阳县| 咸宁市| 武川县| 深州市| 英德市| 新巴尔虎右旗| 浦江县| 精河县| 桂平市| 怀远县| 冀州市| 隆安县| 太谷县| 定安县| 涡阳县| 明星| 郸城县|