Node.js异步机制造成的坑

2017-10-16  本文已影响67人  汨罗在北方

Node.js所有程序都是异步执行的,导致程序执行的过程中可能会有一些坑的存在。

比如如下一段代码:

flag = init_mongodb(jsonconfig);
if (flag != NOERROR) {
      console.log(flag);
      mylogger.logWarn("Database connect error!");
      process.exit();
}

此段代码中init_mongodb()函数初始化了mongodb,链接成功后返回一个返回值,用于下面的判断,要不对的话就弹出程序。

但这里就遇到一个问题:Node.js的机制是异步的,在执行到if一句时flag还是undefined状态。

所以此处就涉及到了怎么实现回调的问题了。知乎大神是这样解释的:

js 本来就是异步的,要不是callback,要不是 Promise,没法同步写代码

异步函数按顺序执行是老问题了,有各种各样的方法,Callback就跳过不说了。

作者:yjcxy12 链接:https://www.zhihu.com/question/39711453/answer/91885082来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后这个问题我把回调加到了函数callback里了事。但详细研究还是应该用更好的方法。
然后,我找到了(2017,我们来聊聊 Node.js)[https://cnodejs.org/topic/58eee565a92d341e48cfe7fc]这篇文章

文章中写到对于node.js首先需要建立的一个概念就是:
Node.js是为异步而生的,它自己把复杂的事儿做了(高并发,低延时),交给用户的只是有点难用的Callback写法。
所以更好的解决方法是Async函数和Promise

有如下的图:

回调机制

红色代表Promise,是使用最多的,无论async还是generator都可用
蓝色是Generator,过渡货
绿色是Async函数,趋势

上一篇 下一篇

猜你喜欢

热点阅读