非前端,轻吐槽- -
自己做 spa 弄的,想要先判断是不是登录,如果登录的话,再去加载别的信息。
以下是示例,效果就是先获取 session ,如果登录的话,再运行 callback 。
$.get('/session', (data)=>{
if(data.login) loading.done('login');
}
//然后在别的文件里
loading.run_after(callback, 'login');
callback 会在 login 后才执行,第二个参数也可以是 Array
不知会不会有用,本体很短,地址在这里 (忽略这个仓库,还没做完...)
1
guokeke 2017-03-19 12:19:52 +08:00
我觉得你直接回掉就好。
如果你觉得不优雅可以看看 Promise. |
2
jarlyyn 2017-03-19 12:21:21 +08:00
楼主看过 async.js 吗?
|
3
think2011 2017-03-19 12:31:29 +08:00
目测楼主用的是 jquery ,你可以试试这样
```js function fetchSession() { // 防止多次请求 if(window.SESSION) return $.when(window.SESSION) return $.get('/session', (data) => { window.SESSION = data.login return data.login } } fetchSession().then( data => { // do sth }) fetchSession().then( data => { // do sth2 }) ``` |
4
oott123 2017-03-19 12:36:17 +08:00
挺不错的小轮子。不过 loading.run_after 的两个参数如果对调的话应该会更好看。
当然了,从实用和工程的角度来说,还是看看 Promise 比较好…… |
5
loading 2017-03-19 12:51:43 +08:00
恩,对我这个程序写着玩的销售很有用。
感谢分享! |
6
xujinkai OP |
7
oott123 2017-03-19 13:31:27 +08:00 1
完全不用改别的地方。就你这个需求而言,可以直接用 promise 写好,和你的几乎等价:
https://gist.github.com/a1001fdfd0d33d8711f5b7aa12f666fe |
8
oott123 2017-03-19 13:34:19 +08:00
Promise 并不一定要求你在所有地方都用 Promise ,这是一个误解。
你可以把 Promise 和回调等异步手段混用,没有任何问题。只是从实践角度而言,不推荐这么写(主要是维护起来很乱)。 作为小项目,更应该尝试使用新鲜有趣的设计、保持快速迭代。 |
10
jzz7280 2017-03-19 16:18:01 +08:00
建议看看"你不知道的 javascript"中卷
|
11
iyangyuan 2017-03-19 19:05:49 +08:00 via iPhone
有些顺序也可以巧妙的通过 js 单线程模型实现
|
12
chaegumi 2017-03-20 09:06:40 +08:00
LABjs
|