最近在学 nodeJS ,感觉是为了避免 IO 阻塞,中间会用到很多回调。
于是乎原来 if(CheckUser){}...这种简单的代码变的极大复杂化了
尝试写了下面这段代码,但发现由于作用域问题完全无法执行 success_func()和 fail_func()
尝试使用 flag 也是不行
大家在用 nodejs 写类似代码的时候是怎么处理的呢?
不想把 app.get()代码粗暴的直接塞到判断结果里,想通过调用方式实现。
1
shiny 2016-06-30 04:24:24 +08:00 via iPhone
用 es7 的 async/await 。
|
2
shiny 2016-06-30 04:26:30 +08:00 via iPhone 1
只要 CheckUser 返回的是一个 Promise ,就可以 if(await CheckUser()) 了
|
3
yyfearth 2016-06-30 04:38:30 +08:00 1
如果要用 ES7 就可以用 async/await
不想增加额外的编译器 就用 Promise 好了 你返回一个 Promise 就不需要这么多 callback 了 |
4
qq316107934 OP |
5
stiekel 2016-06-30 07:27:01 +08:00 1
其实你主要的问题是,代码没有分布到不同的文件进行组织。
比如,连接数据库的代码,应该在单独的文件里,然后在应用初始化的时候,就连接完成。 还有 Modal 的数据,应该在单独的文件中定义,然后通过 `mongoose.modal('user')` 来获取。 另外,在任何一个回调函数中,都必须判断 `err`。 |
6
shyling 2016-06-30 07:34:46 +08:00 via iPad
为什么不能执行 succ_func,failed_func?
|
7
vghdjgh 2016-06-30 07:41:48 +08:00 1
槽点略多,要理解 mongodb 只需要连一次,每个 error 都要处理;除了 async/await 解决 callback 之外,还需要把用到的 callback 封装成 promise ,再统一 catch 到 error 处理,就能避免处理每个 error 了
|
8
visonme 2016-06-30 08:45:09 +08:00 1
将功能分散到独立的模块中
最大限度将返回的结果(错误 /成功)统一到一个 callback 中 不妨尝试下 ES6 promise ,自己简单封装个,避开无限的 cb |
9
BOYPT 2016-06-30 08:56:55 +08:00
可能楼主看的教程太古老了吧……
|
10
mars0prince 2016-06-30 09:07:29 +08:00 1
koa 你值得拥有
|
11
keyfunc 2016-06-30 09:18:10 +08:00 1
有种东西叫 promise
|
12
yurivvvvv 2016-06-30 09:24:49 +08:00 via Android
个人觉得,写异步用回调最直观...
|
13
qq316107934 OP |