mongondb - node.js里冗长的回调嵌套如何破除
迷茫
迷茫 2017-04-17 11:17:43
[Node.js讨论组]

这是一个mongodb官方node.js客户端里的例子

  var MongoClient = require('mongodb').MongoClient
    , format = require('util').format;    

  // Custom factory (need to provide a 12 byte array);
  CustomPKFactory = function() {}
  CustomPKFactory.prototype = new Object();
  CustomPKFactory.createPk = function() {
    return new ObjectID("aaaaaaaaaaaa");
  }

  MongoClient.connect('mongodb://127.0.0.1:27017/test', {'pkFactory':CustomPKFactory}, function(err, db) {
    if(err) throw err;

    db.dropDatabase(function(err, done) {

      db.createCollection('test_custom_key', function(err, collection) {

        collection.insert({'a':1}, function(err, docs) {

          collection.find({'_id':new ObjectID("aaaaaaaaaaaa")}).toArray(function(err, items) {
            console.dir(items);
            // Let's close the db
            db.close();
          });
        });
      });
    });
  });

实际上在node.js里,这种例子比比皆是,因为它的特点就是事件回调,在处理高并发而且逻辑不复杂的代码时,当然是ok的。但是如果我要用它来做应用比较复杂的事情,比如上面这个,一个页面要读取一堆数据,需要我一个一个嵌套写下来简直太痛苦了,不知道node.js里有没有成熟的解决方案呢,兼顾性能和可读性。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
PHPz

有两类方案。

第一类是仅需要使用npm安装的node modules:
async
Q

第二类需要增加额外的语法糖或者需要新特性的支持:
co
wind.js

其实异步编程最重要的是组织好你的函数,每个函数都赋予清晰的名字,只要你的思路清晰,那么你的代码就不容易出错,这一点,无论异步还是同步,都恨重要。

迷茫

async, promise

高洛峰

bluebird 不错

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号