文档章节

Promise & callback hell

KatharinaL
 KatharinaL
发布于 2016/12/13 00:01
字数 526
阅读 11
收藏 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
广州
程序员
私信 提问
【英】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......

01/15
0
0
JavaScript async/await发展史

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

疯魔程序员
2017/11/11
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无愧于心
06/08
0
0
指令式Callback,函数式Promise:对node.js的一声叹息

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

大糊涂
2015/06/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 懒床是对冬天最起码的尊重

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念 :分享daniwellP/桃音モモ的单曲《Nyan Cat》 《Nyan Cat》- daniwellP/桃音モモ 手机党少年们想听歌,请使劲儿戳(这里) @巴拉迪...

小小编辑
36分钟前
7
2
码云项目100,水一发

简单回顾一下: 早期构想最多的,是希望能将PHP一些类和编码分区做得更细,所以很多尝试。但不得不说,PHP的功能过于单一,是的,也许写C/C++扩展,可以解决问题,那我为什么不用C#或者Golan...

曾建凯
今天
3
0
Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部