Promise

1
2
3
4
5
6
7
8
9
10
function startPromise() {
console.log(arguments)
return new Promise((res, rej) => {
console.log('Promise started') // new出Promise之后,这几条语句会立即执行
setTimeout(() => res("Done"), 2000)
})
}


startPromise().then(startPromise).then(startPromise)

Async

更好的写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function startPromise() {
console.log(arguments)
return new Promise((res, rej) => {
console.log('Promise started') // new出Promise之后,这几条语句会立即执行
setTimeout(() => res("Done"), 2000)
})
}

async function somefunc() {
console.log(await startPromise())
console.log(await startPromise())
}

somefunc().then(() => console.log("Fulfilled"))
console.log("Somefunc started");

Generator

这个是从Python引入的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function* afunc() {
console.log("Started");
console.log(yield 1) // 第一次next,执行到这,next函数返回1。

console.log("After yielding 1")
console.log(yield 2) // 输出next函数内传入的参数

console.log("End")
}

let generatorObj = afunc() // 执行函数返回生成器对象
console.log(generatorObj.next("A")); // Object {value: 1, done: false}
console.log(generatorObj.next("B"));
console.log(generatorObj.next("C")); // Object {value: undefined, done: true}

函数被分成一小段一小段执行,两个函数的代码穿插执行。