示例:
// 作为一个模块封装了用户的信息
var username = "zhangsan";
var password = "123123";
==============================================================================
模块功能主要由两个命令构成:export 和 import。export
命令用于规定模块的对外接口,import 命令用于输入其他模块提供的功能。
一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用 export
关键字输出该变量。下面是一个 JS 文件,里面使用 export
命令输出变量。
示例,新建一个名为 userInfo.js 的文件,在其中写入以下代码。
// userInfo.js
var username = "zhangsan";
var password = "123123";
exports.input_info = function () {
console.log("用户名为" + username);
console.log("用户密码为" + password);
};
新建一个名为 showInfo.js 的文件,在其中写入以下代码。
// userInfo,js
let i = require("./userInfo");
i.input_info();
在终端使用以下命令运行。
node showInfo
可以看到,如下图所示效果:
==============================================================================
使用 export
命令定义了模块的对外接口以后,其他 JS 文件就可以通过 import
命令加载这个模块。
示例:
import { username, password } from "./userInfo";
===============================================================================
Promise 是一种异步操作,共有三种状态:
-
pending(进行中)。
-
fulfilled(已成功)。
-
rejected(已失败)。
特点:
-
只有异步操作可以决定当前处于的状态,并且任何其他操作无法改变这个状态;
-
⼀旦状态改变,就不会再变。状态改变的过程只可能是从 pending 变为 fulfilled 和从 pending 变为 rejected 。如果状态发⽣上述变化后,此时状态就不会再改变 了,这时就称为 resolved(已定型) 。
===========================================================================
其使用格式为:
then(fn1,fn2)
fn1 , fn2 分别指定 resolved 状态和 rejected 状态的回调函数。第一个回调函数就是 fulfilled
状态时调用;第二个回调函数就是 rejected
时调用,第二个参数是可选的。
示例,新建一个名为 then.js 的文件,写入以下代码:
const promise1 = new Promise(function (resolve, reject) {
resolve("success1");
resolve("success2");
});
const promise2 = new Promise(function (resolve, reject) {
resolve("success3");
reject("reject");
});
promise1.then(function (value) {
console.log(value); // success1
});
promise2.then(function (value) {
console.log(value); // success3
});
使用命令node then
在终端运行之后,会得到以下结果。
============================================================================
返回一个 Promise ,并且处理拒绝的情况。它的行为与调Promise.prototype.then(undefined, onRejected)
相同。
其语法为:
p.catch(onReject);
p.catch(function (reason) {
// 拒绝
});
==========================================================================
其语法为:
Promise.all(iterable);
iterable
必须是一个可迭代对象,如 Array 或 String,返回一个新的 Promise
实例。
如果传入的参数中存在不是 Promise
实例,则会先调用 Promise.resolve
,将其转为 Promise
实例,再进一步处理。
如果传入的参数为空的可迭代对象,则同步返回一个已完成(already resolved)状态的 Promise;非空时则返回一个异步完成(asynchronously resolved)。
示例, 新建一个名为 all.js
的文件,写入以下代码。
// all.js
var p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, "one");
});
var p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, "two");
});
var p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, "three");
});
var p4 = new Promise((resolve, reject) => {
reject("p4 reject!");
});
var p5 = new Promise((resolve, reject) => {
reject("p5 reject!");
});
Promise.all([p1, p2, p3, p4, p5]).then(
(values) => {
console.log(values);
},
(reason) => {
console.log(reason);
}
);
// p4 reject!
在终端输入 node all.js 后,我们会看到如下图所示的结果:
=========================================================================================
该构造函数接收两个函数作为参数,分别是 resolve 和 reject 。
当异步操作执行成功后,会将异步操作结果作为参数传入 resolve 函数并执行,此时 Promise 对象状态从 pending 变为 fulfilled ; 失败则会将异步操作的错误作为参数传入 reject 函数并执行,此时 Promise 对象状态从 pending 变为 rejected 。