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