文档章节

Promise & callback hell

KatharinaL
 KatharinaL
发布于 2016/12/13 00:01
字数 526
阅读 10
收藏 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);
    });
}

© 著作权归作者所有

共有 人打赏支持
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......

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无愧于心
06/08
0
0
扒一扒PROMISE的原理,大家不要怕!

在前端的日常工作中,回调函数(callback)应该是见怪不怪了,但是当回调函数遇上了异步(async),这就令人发指了。那么异步是什么意思呢,简单地说就是不等你执行完,就先执行下方的代码了...

cherryvsun
08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ std::function 和 std::bind

C++11提供了std::function和std::bind两个工具,用于引用可调用对象。这些可调用对象包括 普通函数,Lambda表达式,类的静态成员函数,非静态成员函数以及仿函数等。引用可调用对象,可以用于...

yepanl
今天
1
0
python:可迭代对象的索引

关于 python的range的用法: 注意是[ 开始,结束)的半开区间,不包括结束 http://www.runoob.com/python/python-func-range.html import collectionsfrom collections import Iterable字符串......

Oh_really
今天
2
0
docker-compose ,docker-stack

1.例子 version: "3"services: php: image: registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5 ports: - "38080:80" networks: - my_php_mysql volum......

chenbaojun
今天
3
0
SQL_Server2000示例数据库NorthWind的分析(转)

SQL_Server2000示例数据库NorthWind的分析 表名:Categories(食品类别表) 表结构: 字段名称 数据类型 长度 允许为空 CategoryID(主键) int 4 否 CategoryName nvarchar 15 否 Description ...

QQZZFT
今天
1
0
laravel 5.5 Session store not set on request.

laravel 5.5 数据存入session,会出现Session store not set on request.错误。查了下laravel 5.5将session放到global middleware中,需要laravel的文件 ./app/Http/Kernel.php中的加上一句:...

MichaelShu
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部