成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Node.js基礎 23456:全局對象,回調函數,模塊,事件,讀寫文件(同步,異步)

RobinTang / 389人閱讀

摘要:它們的作用域只在模塊內,詳見文檔回調函數與一樣,如模塊一個大項目一定是分成一個個模塊的,一般來說,一個文件就是一個模塊。這些對象有一個函數,用于將一個或多個函數綁定到命名事件上。用于注冊監(jiān)聽器,用于觸發(fā)事件。

全局對象

類似的,在瀏覽器中有window
全局變量在所有模塊中都可使用。不需要引用等。
全局變量
console,setTimeout,require()

全局變量在所有模塊中都可使用。 以下變量雖然看起來像全局變量,但實際上不是(global里面沒有以下屬性)。 它們的作用域只在模塊內,詳見 文檔:

__dirname
__filename
exports
module
require()
回調函數

與js一樣,如:

function callFunction(fun, name) {
    fun(name);
}

callFunction(function(name) {
    console.log(name + " Bye");
}, "mtt");
模塊

一個大項目一定是分成一個個模塊的,一般來說,一個文件就是一個模塊。
模塊使用方法:

向外暴露的是一個對象。

我們require()的時候,接收的也是一個對象.
所以也可以這樣寫:


app.js

var stuff = require("./count");



console.log(stuff.counter(["ruby", "nodejs", "react"]));
console.log(stuff.adder(3));//6.14

可以使用別的模塊里的變量(閉包)
count.js

var adder = function(a) {
    return `the sum of the 2 numbers is ${a+pi}`;
}

var pi = 3.14;

module.exports = {
    counter: function(arr) {
        return "There are " + arr.length + " elements in the array";
    },
    adder: adder
}
事件

http://nodejs.cn/api/events.html

大多數 Node.js 核心 API 構建于慣用的異步事件驅動架構,其中某些類型的對象(又稱觸發(fā)器,Emitter)會觸發(fā)命名事件來調用函數(又稱監(jiān)聽器,Listener)。

例如,net.Server 會在每次有新連接時觸發(fā)事件,fs.ReadStream會在打開文件時觸發(fā)事件,stream會在數據可讀時觸發(fā)事件。

所有能觸發(fā)事件的對象都是 EventEmitter 類的實例。 這些對象有一個 eventEmitter.on() 函數,用于將一個或多個函數綁定到命名事件上。 事件的命名通常是駝峰式的字符串。

EventEmitter 對象觸發(fā)一個事件時,所有綁定在該事件上的函數都會被同步地調用。

例子,一個簡單的 EventEmitter 實例,綁定了一個監(jiān)聽器。 eventEmitter.on() 用于注冊監(jiān)聽器,eventEmitter.emit() 用于觸發(fā)事件。

const EventEmitter = require("events");

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on("event", () => {
  console.log("觸發(fā)事件");
});
myEmitter.emit("event");

總結理解:

觸發(fā)器(Emitter)會觸發(fā)監(jiān)聽器(Listener),然后函數會被同步調用。

myEmitter.on("event", () => {});用來 綁定事件與函數(注冊監(jiān)聽器,eventEmitter.emit() 用于觸發(fā)事件

例子:net.Server 會在每次有新連接時觸發(fā)事件,fs.ReadStream會在打開文件時觸發(fā)事件,stream會在數據可讀時觸發(fā)事件。

傳參數與 this 到監(jiān)聽器

http://nodejs.cn/api/events.h...

eventEmitter.emit() 方法可以傳任意數量的參數到監(jiān)聽器函數。 當監(jiān)聽器函數被調用時,this 關鍵詞會被指向監(jiān)聽器所綁定的EventEmitter 實例。
const EventEmitter = require("events");
class MyEmitter extends EventEmitter{}
const myEmitter1 = new MyEmitter();
myEmitter1.on("exxx",function (a, b) {
    console.log(a, b, this, this===myEmitter1);
})


myEmitter1.emit("exxx","我是a","我是b")


總結:

eventEmitter.emit() 從第二個參數開始,會把參數傳到監(jiān)聽器綁定的那個函數里面,作為第一個開始.

this代表調用on的那個實例

事件只處理一次

當使用 eventEmitter.on() 注冊監(jiān)聽器時,監(jiān)聽器會在每次觸發(fā)命名事件時被調用。

const myEmitter = new MyEmitter();
let m = 0;
myEmitter.on("event", () => {
  console.log(++m);
});
myEmitter.emit("event");
// 打印: 1
myEmitter.emit("event");
// 打印: 2

使用 eventEmitter.once() 可以注冊最多可調用一次的監(jiān)聽器。 當事件被觸發(fā)時,監(jiān)聽器會被注銷,然后再調用。

const myEmitter = new MyEmitter();
let m = 0;
myEmitter.once("event", () => {
  console.log(++m);
});
myEmitter.emit("event");
// 打印: 1
myEmitter.emit("event");
// 不觸發(fā)

evnets是核心庫,直接require("events")
手動用代碼觸發(fā)事件。
util(實用工具)(nodejs核心工具庫)
http://nodejs.cn/api/util.htm...

var events = require("events");
var util = require("util");//nodejs工具庫

var Person = function(name) {
    this.name = name
}

util.inherits(Person, events.EventEmitter);
//讓Person繼承events.EventEmitter(也可以用ES6寫法的extends關鍵字),讓他擁有可以綁定事件,觸發(fā)事件的功能。
var xiaoming = new Person("xiaoming");
var lili = new Person("lili");
var lucy = new Person("lucy");
//新生成三個對象
var person = [xiaoming, lili, lucy];

person.forEach(function(person) {
    person.on("speak", function(message) {
        console.log(person.name + " said: " + message);//給每一個新對象綁定事件
    })
})

xiaoming.emit("speak", "hi");//每一個新對象都可以觸發(fā)事件
lucy.emit("speak", "I want a curry");
讀寫文件(同步,異步)

文件系統:http://nodejs.cn/api/fs.html
fs 模塊用于以一種類似標準 POSIX 函數的方式與文件系統進行交互。

使用方法如下:

const fs = require("fs");
所有的文件系統操作都有同步異步兩種形式。

異步

異步形式的最后一個參數是完成時的回調函數。 傳給回調函數的參數取決于具體方法,但第一個參數會保留給異常。 如果操作成功完成,則第一個參數(異常)會是 nullundefined。

const fs = require("fs");

fs.unlink("/tmp/hello", (err) => {
  if (err) throw err;
  console.log("成功刪除 /tmp/hello");
});
同步

當使用同步操作時,任何異常都會立即拋出,可以使用 try/catch 處理異常。

const fs = require("fs");

try {
  fs.unlinkSync("/tmp/hello");
  console.log("成功刪除 /tmp/hello");
} catch (err) {
  // 處理異常。
}
同步異步注意

異步的方法不能保證執(zhí)行順序。 所以下面的例子可能會出錯,因為 fs.stat() 可能在 fs.rename() 之前完成:

fs.rename("/tmp/hello", "/tmp/world", (err) => {
  if (err) throw err;
  console.log("重命名完成");
});
fs.stat("/tmp/world", (err, stats) => {
  if (err) throw err;
  console.log(`文件屬性: ${JSON.stringify(stats)}`);
});
要想按順序執(zhí)行操作,需要把 fs.stat() 放到 fs.rename() 的回調函數中:

fs.rename("/tmp/hello", "/tmp/world", (err) => {
  if (err) throw err;
  fs.stat("/tmp/world", (err, stats) => {
    if (err) throw err;
    console.log(`文件屬性: ${JSON.stringify(stats)}`);
  });
});

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/102485.html

相關文章

  • Node.js知識點詳解(一)基礎部分

    摘要:基礎的端到端的基準測試顯示大約比快八倍。所謂單線程,就是指一次只能完成一件任務。在服務器端,異步模式甚至是唯一的模式,因為執(zhí)行環(huán)境是單線程的,如果允許同步執(zhí)行所有請求,服務器性能會急劇下降,很快就會失去響應。 模塊 Node.js 提供了exports 和 require 兩個對象,其中 exports 是模塊公開的接口,require 用于從外部獲取一個模塊的接口,即所獲取模塊的 e...

    whjin 評論0 收藏0
  • 后端知識點總結——NODE.JS(高級)

    摘要:階段是事件循環(huán)的第一階段習慣上往往都會設置數將回調函數添加到事件循環(huán)的階段的隊列中等待執(zhí)行。 后端知識點總結——NODE.JS(高級) 1.Node入門: 什么是: 針對網絡應用開發(fā)的平臺主要特征: 基于Google的JavaScript運行時引擎V8 擴展了Node標準類庫: TCP,同步或異步文件管理,HTTP 為什么使用Node: 可以在服務器端運行js: 現有前端團隊可直...

    bovenson 評論0 收藏0
  • Node.js設計模式》Node.js基本模式

    摘要:回調函數是在異步操作完成后傳播其操作結果的函數,總是用來替代同步操作的返回指令。下面的圖片顯示了中事件循環(huán)過程當異步操作完成時,執(zhí)行權就會交給這個異步操作開始的地方,即回調函數。 本系列文章為《Node.js Design Patterns Second Edition》的原文翻譯和讀書筆記,在GitHub連載更新,同步翻譯版鏈接。 歡迎關注我的專欄,之后的博文將在專欄同步: Enc...

    Seay 評論0 收藏0
  • Node.js 學習筆記(三)

    摘要:在瀏覽器中的全局對象是對象。程序是由事件驅動執(zhí)行的單線程模型,也不例外。不斷執(zhí)行響應事件的函數,直到沒有任何響應事件的函數可以執(zhí)行,就退出了。方法此方法可以在下一次事件響應中執(zhí)行代碼。它會返回一個對象,告訴我們文件的詳細信息。 global JS在瀏覽器中的全局對象是window對象。在Node.js環(huán)境中,全局對象則叫global。我們可以用它來區(qū)分當前JavaScript的執(zhí)行環(huán)境...

    sorra 評論0 收藏0
  • Node_深入淺出Node

    摘要:簡介項目命名為就是一個服務器單純開發(fā)一個服務器的想法,變成構建網絡應用的一個基本框架發(fā)展為一個強制不共享任何資源的單線程,單進程系統。單線程弱點無法利用多核錯誤會引起整個應用退出,應用的健壯性大量計算占用導致無法繼續(xù)調用異步。 NodeJs簡介 Ryan Dahl項目命名為:web.js 就是一個Web服務器.單純開發(fā)一個Web服務器的想法,變成構建網絡應用的一個基本框架.Node發(fā)展...

    shinezejian 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<