CommonJS了解手记

CommonJS概述

JavaScript的是根据ECMAScript规范指定的一种用于网络的脚本语言,而在此基础上,为了完善JS语言,增加其跨平台的特性,增添了对后端的规范。CommonJS这一规范,该规范主要用于后端服务器。
  • 没有模块系统
  • 没有标准接口
  • 标准库较少
  • 异步JS嵌套回调灾难

要详细了解这些内容,推荐《深入浅出Node.js》一书。本文章主要用于介绍CommonJS中的Promise规范(用于解决回调函数嵌套)、模块化规范(require)


Promise规范

Promise规范主要规定了异步调用实现包括:success\fail\ready三个状态,以及两个回调函数:success和fail,并且要求提供then方法(核心)。用于解决回调时候的嵌套过多的问题。
then方法:then(success,fail),then中包含两个参数,一个是成功时的回调函数,一个失败时的回调函数。同时then方法返回一个promise,即你可以Promise.then(s1,f1).then(s2,f2).then(s3,f3)….这样一直调用下去。

已经实现了Promise的浏览器中,可以使用js原生或者jQuery的Promise去调用then。

如:jQuery:

var $info = $("#info");
$.ajax({
    url: "/echo/json/",
    data: {
        json: JSON.stringify({
            "name": "someValue"
        })
    },
    type: "POST"
})
.then(function (response) {
    $info.text(response.name);
});

javascript:

var promise = new Promise(function(resolve, reject) {
  // 做一些异步操作的事情,然后……

  if (/* 一切正常 */) {
    resolve("Stuff worked!");
  }
  else {
    reject(Error("It broke"));
  }
});

promise.then(function(result) {
  console.log(result); // “完美!”
}, function(err) {
  console.log(err); // Error: "出问题了"
});

模块化规范

根据CommonJS,一个文件就是一个模块。加载模块使用require方法,并且返回文件内exports的对象或者函数。

1、调用模块

对本地文件:
var exam = require(‘./example.js’);或var exam = require(‘./example’);(默认省略.js后缀名)
exam即获得了example.js中exports对象。
如果需要返回对象时,文件写成
exports.a = 123;
exports.b = function(){}

则调用时:exports = {a:123,b:[fun]}

2、定义模块
如果需要返回函数时,文件写成
module.exports = function(){}

则调用时:exports = [function]

对核心模块(如express.js):
var exam = require(‘express’);
省略路径即可。服务器默认从node_modules目录中寻找模块

3、AMD与Common的兼容
CommonJS规范加载时同步加载的,即阻塞性。需要加载完毕才继续后面的操作。
AMD规范加载是异步加载的(如前端的require.js库),使用的是依赖注入的方式调用回调函数。
如想了解,可以查看requireJS是如何定义模块的。
同时AMD规范可以兼容CommonJS规范,此时,需要在依赖注入的回调中加上:
var myCommon = require(“commonModule”)即可。

参考链接

CommonJS规范-csdn:http://blog.csdn.net/neil_lee_/article/details/16967987
Promise/A+规范:http://segmentfault.com/a/1190000002452115
JavaScript异步编程助手:Promise模式-csdn:http://www.csdn.net/article/2013-08-12/2816527-Promise

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值