文档章节

Promise & callback hell

KatharinaL
 KatharinaL
发布于 2016/12/13 00:01
字数 526
阅读 12
收藏 0

#问题 这几天的工作就是做一个网站注册登陆的Assignment,整个结构框架都很清晰,然后在推进的过程中还是发现异步调用存在问题,刚刚学习nodejs不久就体会到了callback hell的可怕,但是这个问题又是不能不去解决的。所以还是老老实实解决吧。从promise到generator再到async await,个人感觉其实还是async await最好用,但是不知道为什么实现不了,可能是版本的问题,但是好像还涉及编译什么的,最后还是用不上。然后没有选择用generator的原因是感觉我面对的这个问题可能用promise写起来更顺手一些,所以就还是选择了promise,不同情况下应该用不同的解决方案。

#遇到的小case 我要在数据库中查询当前的输入的用户信息在数据库中是否存在,然后要把错误信息传给controller层。然后因为查询信息肯定是异步的,我要返回数据肯定要等所有的都查询完再返回,一开始没有考虑到,所以永远都是没有重复的。后来发现这个问题以后,面对mongoose的count()方法怎么写异步又不知道怎么写,最后还是看了N多资料慢慢摸索出来的,所以迁移能力还是很重要的啊。

#然后先贴一下代码吧

function CheckRepeat(users) {
    function fun1(info) {
    	return new Promise(function(resolve, reject) {
    		user.count({name:users.name},function(err,res) {
    			if (err) resolve("error");
    			else {
    				if (res == 0) resolve(info);
    				else resolve(info+(" name_repeat"));
    			}
    		});
    	});
    }
    function fun2(info) {
    	return new Promise(function(resolve, reject) {
    		user.count({studentNumber:users.studentNumber},function(err,res) {
    			if (err) resolve("error");
    			else {
    				if (res == 0) resolve(info);
    				else resolve(info+(" studentNumber_repeat"));
    			}
    		});
    	});
    }
    function fun3(info) {
    	return new Promise(function(resolve, reject) {
    		user.count({phoneNumber:users.phone},function(err, res) {
    			if (err) resolve("error");
    			else {
    				if (res == 0) resolve(info);
    				else resolve(info+(" phoneNumber_repeat"));
    			}
    		});
        });
    }
    function fun4(info) {
    	return new Promise(function(resolve, reject) {
    		user.count({email:users.emails},function(err,res) {
    			if (err) resolve("error");
    			else {
    				if (res == 0) resolve(info);
    				else resolve(info+(" email_repeat"));
    			}
    		});
    		
    	});
    }
    Promise.resolve("").then(fun1).then(fun2).then(fun3).then(fun4).done(function(info) {
    	controller.isSucceed(info,users);
    });
}

© 著作权归作者所有

共有 人打赏支持
上一篇: 寻找第k大数字
下一篇: 寻找第k大数字
KatharinaL
粉丝 0
博文 2
码字总数 1039
作品 0
广州
程序员
私信 提问
JavaScript async/await发展史

js是单线程的语言,异步对于js的重要性相比于别的语言更大。async/await是ECMAScript 2017的标准,是最新的js异步调用解决方案。async/await标准的出台也不是一蹴而就的,本文尝试追本溯源,...

疯魔程序员
2017/11/11
0
0
【英】Ajax:从回调地狱到async和await

【英】Ajax:从回调地狱到async和await 阅读 34 收藏 1 2018-01-15 原文链接:www.toptal.com One of the keys to writing a successful web application is being able to make dozens of AJ......

2018/01/15
0
0
理解 async/await

ES7 提出的 函数,终于让 JavaScript 对于异步操作有了终极解决方案。No more callback hell。 函数是 函数的语法糖。使用 关键字 来表示,在函数内部使用 来表示异步。 想较于 Generator, ...

superman666
2017/07/18
0
0
关于async/await的总结

---async和await是干什么用的--- 一句话:是用来解决异步流程问题的。 避免回调地狱(callback hell),且以最接近同步代码的方式编写异步代码 async/await是对co模块的升级,内置生成器函数...

Mr无愧于心
2018/06/08
0
0
指令式Callback,函数式Promise:对node.js的一声叹息

所谓promises,就是不会受不断变化的情况影响。 -- Frank Underwood, ‘House of Cards’ 人们常说Javascript是'函数式'编程语言。而这仅仅因为函数是它的一等值,可函数式编程的很多其他特性...

大糊涂
2015/06/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
1
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部