Promise
异步操作后回调
const promise = new Promise(function(resolve, reject) {
if (){
resolve(value);
} else {
reject(error);
}
});
promise.then(function(value) {
}, function(error) {
});
resolve表示异步操作成功 reject 表示异步操作失败,然后指定then操作。
promise一旦创建就会执行。会在脚本的最后执行。
调用resolve或reject并不会终结 Promise 的参数函数的执行。
promise.catch(function(error) {
console.log(error);
});
catch 相当于 then的reject回调
const p = Promise.all([p1, p2, p3]);
p的状态由p1、p2、p3决定,分成两种情况。
(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
const p = Promise.race([p1, p2, p3]);
只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。
Promise.resolve() Promise.reject()
生成一个resolve/reject的实例
Iterator
Iterator 的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是 ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费。
一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)。
Generator
Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield表达式,定义不同的内部状态(yield在英语里的意思就是“产出”)。
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
hw.next()
hw.next()
hw.next()
hw.next()
yield表达式本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值。
function* f() {
for(var i = 0; true; i++) {
var reset = yield i;
if(reset) { i = -1; }
}
}
var g = f();
g.next()
g.next()
g.next(true)
function* foo() {
yield 1;
yield 2;
yield 3;
yield 4;
yield 5;
return 6;
}
for (let v of foo()) {
console.log(v);
}
async
自带执行器的Generator 使用async代替* 使用await代替yield
const asyncReadFile = async function () {
const f1 = await readFile('/etc/fstab');
const f2 = await readFile('/etc/shells');
console.log(f1.toString());
console.log(f2.toString());
};
可以使用then方法添加回调函数。
class
class Point
toString()
}
constructor代替构造方法