co函数库
co可以说是给generator增加了promise实现。co是利用Generator的方式实现了async/await
(co返回Promise对象,async也返回Promise对象,co内部的generator函数即async,yield相当于await)
co 函数库其实就是将两种自动执行器(Thunk 函数和 Promise 对象),包装成一个库。
co函数接收一个Generator生成器函数作为参数。执行co函数的时候,生成器函数内部的逻辑像async函数调用时一样被执行。不同之处只是这里的await变成了yield(产出)。
co(function* () {
var result = yield Promise.resolve(true);
return result;
}).then(function (value) {
console.log(value);
}, function (err) {
console.error(err.stack);
});
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件监听——更合理和更强大。 promise catch函数和then第二个函数参数:
promise.catch();
// 等价于
promise.then(null, function(reason){});
有许多场景是异步的: 1.事件监听,如click,onload等事件 2.定时器 setTimeout和setInterval 3.ajax请求
js异步编程模型(es5):
- 回调函数(callback)陷入回调地狱,解耦程度特别低
- 事件监听(Listener)JS 和浏览器提供的原生方法基本都是基于事件触发机制的
- 发布/订阅(观察者模式)把事件全部交给控制器管理,可以完全掌握事件被订阅的次数,以及订阅者的信息,管理起来特别方便。
- Promise 对象实现方式
async函数与Promise、Generator函数一样,是用来取代回调函数、解决异步操作的一种方法。它本质上是Generator函数的语法糖。 Promise,generator/yield,await/async 都是现在和未来 JS 解决异步的标准做法