5、ES6 === 异步 Promise Generator yield
2017-07-20 00:06
453 查看
1、Promise
三种状态:1、Pending: 等待,处理中,然后:
*、Resolve: 完成
*、Rejected: 拒绝,失败
(()=>{ // 简单理解 Promise let p1 = new Promise((resolve, reject)=>{ if (异步处理成功了) { resolve(成功的数据); }else{ reject(失败的原因); } }); p1.then(成功(resolve), 失败(reject)).then(...); })();
(()=>{ let p1 = new Promise((resolve, reject)=>{ resolve(1); }); p1.then((value)=>{ console.log('成功了 ==' + value);// 执行: '成功了 ==1' }, (err)=>{ console.log('失败了');// 不执行 }); })();
(()=>{ // ... let p1 = new Promise((resolve, reject)=>{ resolve('我是数据'); }); p1.then((value)=>{ return value; // 返回给下一个 then }, (err)=>{ console.log('失败了: ' + err);// 不执行 }).then((val)=>{ console.log(val); // 执行:"我是数据" }, (err)=>{ console.log('失败了: ' + err);// 不执行 }); })();
(()=>{ // Promise catch方法 let p1 = new Promise((resolve, reject)=>{ resolve('我是数据'); }); p1.then((value)=>{ console.log(value); // 我是数据 throw '发生错误了'; }).catch((e)=>{ console.log(e); // 发生错误了 }); })();
(()=>{ // Promise all let p1 = Promise.resolve(3); let p2 = Promise.reject(5); // all:只要有一个错误,就报错 Promise.all([p1, p2]).then((value)=>{ console.log(value); }, (err)=>{ console.log('错误了: ' + err); // 错误了: 5 }); })();
(()=>{ // Promise race let p1 = new Promise((resolve, reject)=>{ setTimeout(resolve, 500, 'one'); }); let p2 = new Promise((resolve, reject)=>{ setTimeout(resolve, 100, 'two'); }); // race p1,p2谁先执行resolve,就传递谁的数据 Promise.race([p1, p2]).then((value)=>{ console.log(value); // two }); })();
(()=>{ // Promise resolve let p1 = Promise.resolve(3); let p2 = Promise.resolve(p1); p2.then((value)=>{ console.log(value); // 3 }); })();
2、Generator
生成器 —— 是一个函数,可以遍历形式上:
a、函数名字前面有 *
b、函数内部使用 yield 语句
(()=>{ // Generator function* show(){ yield 'Hello'; yield 'World'; yield 'Es6'; } var res = show(); console.log(res.next()); // 结果是:{ value: 'Hello', done: false } console.log(res.next()); // 结果是:{ value: 'World', done: false } console.log(res.next()); // 结果是:{ value: 'Es6', done: false } console.log(res.next()); // 结果是:{ value: undefined, done: true } })();
(()=>{ // Generator function* show(){ yield 'Hello'; yield 'World'; yield 'Es6'; return 'xxx'; } var res = show(); console.log(res.next()); // 结果是:{ value: 'Hello', done: false } console.log(res.next()); // 结果是:{ value: 'World', done: false } console.log(res.next()); // 结果是:{ value: 'Es6', done: false } console.log(res.next()); // 结果是:{ value: 'xxx', done: true } console.log(res.next()); // 结果是:{ value: undefined, done: true } })();
(()=>{ // Generator function* show(){ // yield语句返回值:undefined var a = yield 'Hello'; return a; } var res = show(); console.log(res.next()); // 结果是:{ value: 'Hello', done: false } console.log(res.next()); // 结果是:{ value: undefined, done: true } })();
(()=>{ // Generator function* fn(){ yield 1; yield 2; yield 3; yield 4; yield 5; yield 6; return 7; } // for...of 遍历 for(let v of fn()){ console.log(v); // 1 2 3 4 5 6 } })();
(()=>{ // Generator let json = { *show(){ yield 'a'; yield 'b'; return 'c'; } }; var res = json.show(); console.log(res.next()); // 结果是:{ value: 'a', done: false } console.log(res.next()); // 结果是:{ value: 'b', done: false } console.log(res.next()); // 结果是:{ value: 'c', done: true } })();
相关文章推荐
- 用 ES6 generator & Promise 写异步代码
- ES6--异步操作之Promise
- ES6-Promise与Generator结合
- ES6中Generator与异步操作实例分析
- ES6 Promise对象解决异步回调
- es6 用generator进行异步方法同步
- ECMAScript 6 入门笔记(五)异步promise,Generator,async
- 深入理解 JavaScript 异步系列(3)—— ES6 中的 Promise
- es6 Generator与异步的同步书写
- ES6-Generator与异步操作
- ES6总结--Promise 、Generator 、Async/Await
- ES6 异步编程之一:Generator
- ES6中的异步对象Promise
- Promise,Generator(生成器),async(异步)函数
- 异步javascript,callback、Promise?我们用Generator!
- 微信小程序 es6-promise.js封装请求 处理异步进程
- 微信小程序 es6-promise.js封装请求与处理异步进程
- 异步 promise +generator+async(未完成)
- ES6 - Promise对象,异步操作
- ES6/7/8新特性Promise,async,await,fetch带我们逃离异步回调的深渊