JS回调函数中无法改变外部变量的问题
来源:互联网 发布:悍将传世源码 编辑:程序博客网 时间:2024/06/04 19:06
今天又遇到了上次的问题,上次只是找了个方法解决,没有搞清楚原理;
router.get('/', function (req, res, next) { var abc; Article.findArticle({}, function (err, res) { if (err) { console.log(err); } else { //操作查询出的文章 abc = res; } }); console.log(abc);//undefined res.render('blog/blog', { title:'BLOG', article:JSON.stringify(abc) });});
在express中,查询数据库中的数据,后通过回调函数传递给全局变量,从而渲染到EJS模板,按以上写法是无法将res赋值给abc的,或者说,赋值给了abc,但是对abc的操作是在赋值之前的。
一开始我以为是变量的定义问题,后来发现,全都定义为全局变量也不行;
然后我突然发现,这其实是回调函数异步执行的问题;
看以下代码:
window.onload = function(){ function fn1(callback) { setTimeout(function(){ console.log(1); },100); callback(); }; function fn2() { console.log(2); } fn1(fn2); fn2(); }
结果是221 console.log(1)
在100毫秒后执行,他后面的代码都执行完了,他才会执行,在这里,延时100毫秒,就相当于查询数据库所需要的时间,数据还未查询到,abc=res
就无法执行,当这句代码执行时,后面的操作已经执行完了,但是我们已经看不到了;
因为在整个代码执行流中,JS的异步机制,决定了他无法等待上一步的执行结果,如果时间稍长(比如需要查询数据库),就只能以一个异步的执行流去写代码。
要注意摒弃同步的思想。
阅读全文
0 0
- JS回调函数中无法改变外部变量的问题
- ajax异步回调函数中给外部变量赋值的问题
- js中回调函数的运用
- JS中回调函数的写法
- js中回调函数
- 今天遇到的关于juqery中ajax success回调函数无法执行问题
- Shell编程中使用管道循环中无法改变外部变量的解决办法
- js中回调函数的理解 举例说明js回调函数
- gearman c 回调函数无法使用的问题
- ajax执行后调用回调函数对外部变量赋值,不成功的分析
- 二重指针变量做形参的目的是为了能在被调函数中改变指针变量的值
- js的回调函数
- js的回调函数
- js中回调函数的学习笔记
- js中回调函数的学习笔记
- 使用匿名函数在回调函数中正确访问JS循环变量
- js中自定义回调函数
- js 中递归 与 回调函数
- 百练1321:棋盘问题
- Eclipse Oxygen创建第一个Hibernate 5程序
- 双向链表
- Android零基础入门第61节:滚动视图ScrollView
- Tensorflow Model Persistence
- JS回调函数中无法改变外部变量的问题
- 关于C++构造与析构函数
- 【LeetCode】27. Remove Element
- JAVA工具类(12)---文本字符串工具类(数据替换,加密解密操作)
- 正则表达式 元字符
- UGUI 按钮事件案例
- python list sorted
- 在函数调用值传递问题
- 【HPU】1392 分隔A+B