使用promise 和 generator来管理工作流
function oneStep(value){
return new Promise(function(resolve, reject){
resolve('one step,' + value);
})
}
let stepGenerator = function* (){
try{
for(let i =0; i < 10; ++i){
let value = yield oneStep(`step${i}`);
console.log(`step${i} complete, value:${value}`);
}
}catch(e){
console.log('generator e', e);
}
}
function run(generator){
let it = generator();
function go(result){
console.log('go,', result);
if(result.done){
console.log('done');
return result.value;
}
return result.value.then(function(value){
console.log('call go again, then');
return go(it.next(value));
}).catch(function (error){
console.log('call go again, catch');
return go(it.throw(error))
});
}
console.log('call go first');
return go(it.next());
}
let value = run(stepGenerator);
console.log('value', value);
call go first
go, { value: Promise { 'one step,step0' }, done: false }
value Promise { <pending> }
call go again, then
step0 complete, value:one step,step0
go, { value: Promise { 'one step,step1' }, done: false }
call go again, then
step1 complete, value:one step,step1
go, { value: Promise { 'one step,step2' }, done: false }
call go again, then
step2 complete, value:one step,step2
go, { value: Promise { 'one step,step3' }, done: false }
call go again, then
step3 complete, value:one step,step3
go, { value: Promise { 'one step,step4' }, done: false }
call go again, then
step4 complete, value:one step,step4
go, { value: Promise { 'one step,step5' }, done: false }
call go again, then
step5 complete, value:one step,step5
go, { value: Promise { 'one step,step6' }, done: false }
call go again, then
step6 complete, value:one step,step6
go, { value: Promise { 'one step,step7' }, done: false }
call go again, then
step7 complete, value:one step,step7
go, { value: Promise { 'one step,step8' }, done: false }
call go again, then
step8 complete, value:one step,step8
go, { value: Promise { 'one step,step9' }, done: false }
call go again, then
step9 complete, value:one step,step9
go, { value: undefined, done: true }
done
使用promise 和 generator来管理工作流的更多相关文章
- ES6中的Promise和Generator详解
目录 简介 Promise 什么是Promise Promise的特点 Promise的优点 Promise的缺点 Promise的用法 Promise的执行顺序 Promise.prototype. ...
- 前端面试送命题(二)-callback,promise,generator,async-await
前言 本篇文章适合前端架构师,或者进阶的前端开发人员:我在面试vmware前端架构师的时候,被问到关于callback,promise,generator,async-await的问题. 首先我们回顾 ...
- JS异步编程 (2) - Promise、Generator、async/await
JS异步编程 (2) - Promise.Generator.async/await 上篇文章我们讲了下JS异步编程的相关知识,比如什么是异步,为什么要使用异步编程以及在浏览器中JS如何实现异步的.最 ...
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- 原生JS中 callback,promise,generator,async-await 的简介
callback,promise,generator,async-await 的简介 javascript异步的发展历程. ES6 以前: 回调函数(callback):nodejs express ...
- ES Next & Arrow function & Promise & Iterator & Generator yield & Async Await
ES Next & Arrow function & Promise & Iterator & Generator yield & Async Await co ...
- 前端笔记之ES678&Webpack&Babel(下)AMD|CMD规范&模块&webpack&Promise对象&Generator函数
一.AMD和CMD规范(了解) 1.1传统的前端开发多个js文件的关系 yuan.js中定义了一个函数 function mianji(r){ return 3.14 * r * r } main.j ...
- Promise和Generator
异同: 1.promise解决的是串行的嵌套异步问题. 2.yield把Generator Function切割为有多个出口的Generation. 3.Promise是社区的研发产物,yield是E ...
- Promise、Generator,Async/await
我们知道JavaScript是单线程语言,如果没有异步编程非得卡死. 以前,异步编程的方法有下面四种 回调函数 事件监听 发布/订阅 Promise对象 现在据说异步编程终极解决方案是——async/ ...
随机推荐
- python易错题之作用域
name = "lzl" def f1(): print(name) def f2(): name = "eric" f1() f2() //结果为 lzl 记 ...
- Jmeter NonGUI模式
一般情况下我们都是在NonGUI模式下运行jmeter.这样做有两个好处 节省系统资源,能够产生更大的负载 可以通过命令行参数对测试场景进行更精细的配置 示例 创建luzhi.jmx脚本 jmeter ...
- pika的阻塞式使用
[root@cloudplatform ELK]# cat startIncHouTai.py import os # 杀掉内存中的进程 cmd='pgrep -f PutDataToKafkaInc ...
- 基于Spring Boot的微服务搭建
环境: 项目结构: 关键配置 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project ...
- C++雾中风景11:厘清C++类型转换(static_cast,dynamic_cast,reinterpret_cast,const_cast)
C++是一门弱类型的语言,提供了许多复杂和灵巧类型转换的方式.笔者之前写的Python与Go都是强类型的语言,对这种弱类型的设计实在是接受无力啊~~ ( 生活所迫,工作还得写C++啊~~)C++语言提 ...
- redis分布式锁小试
一.场景 项目A监听mq中的其他项目的部署消息(包括push_seq, status, environment,timestamp等),然后将部署消息同步到数据库中(项目X在对应环境[environm ...
- 未将对象引用设置到对象的实例 IIS
CMD C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
- json Map JsonObject JsonArray
json字符串是不应包含 "\"转义字符的,json不能通过js json工具转换或者java json工具 包转换那么一定程度上json字符串已被在一次处理不在能转成json了. ...
- COGS.264.数列操作(分块 单点加 区间求和)
题目链接 #include<cmath> #include<cstdio> #include<cctype> #include<algorithm> u ...
- 潭州课堂25班:Ph201805201 爬虫基础 第七课 Python与常见加密方式 (课堂笔记)
打开图形界面 18版 Python与常见加密方式 前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时 ...